2016-02-09 11 views
5

Ich brauche einen OData4-Dienst von Java und basierend auf der Liste der Frameworks auf der OData website die beiden Möglichkeiten sind Olingo oder die SDL Odata Framework. Mein Problem ist, dass die Dokumentation für diese beiden Projekte sich darauf konzentriert, einen Dienst zu schreiben, der keinen verbraucht. Die Olingo-Site verlinkt auf einen Blogbeitrag von 2014, der nicht mit der aktuellen Version kompatibel ist und auf den SDL-GitHub-Seiten nichts gefunden hat.Wie kann ich einen OData4-Dienst in Java mit Olingo oder dem SDL OData Framework verwenden

Wenn mich jemand nur mit einem einfachen POST bieten könnte/GET Beispiel mit einem geeigneten POJO-Objektmodell verwendet, das wäre toll.

Mein begrenztes Verständnis ist, dass OData keine Informationen über das tatsächliche Objektmodell von der Kompilierung auf dem Client zur Laufzeit bewegt. Ich bin froh, dies zu ignorieren und gegen ein festes Objektmodell zu kodieren, da sich der Dienst, den wir verwenden, nicht ändert.

Antwort

6

Die Dokumentation der Client-Seite API scheint von Olingo ein bisschen vernachlässigt werden. Aber es gibt ein Beispiel in der GIT repository bei Samples/Client.

Grundsätzlich für eine GET tun Sie Folgendes:

String serviceUrl = "http://localhost:9080/odata-server-sample/cars.svc" 
String entitySetName = "Manufacturers"; 

ODataClient client = ODataClientFactory.getClient(); 
URI absoluteUri = client.newURIBuilder(serviceUri).appendEntitySetSegment(entitySetName).build(); 
ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request = 
client.getRetrieveRequestFactory().getEntitySetIteratorRequest(absoluteUri); 
// odata4 sample/server limitation not handling metadata=full 
request.setAccept("application/json;odata.metadata=minimal"); 
ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet, ClientEntity>> response = request.execute(); 
ClientEntitySetIterator<ClientEntitySet, ClientEntity> iterator = response.getBody(); 

while (iterator.hasNext()) { 
    ClientEntity ce = iterator.next(); 
    System.out.println("Manufacturer name: " + ce.getProperty("Name").getPrimitiveValue()); 
} 

Werfen Sie einen Blick auf die Probe in der Olingo Code-Basis weitere Informationen zu erhalten, wie man abrufen Metadaten verarbeiten alle Eigenschaften usw.

Um einen POST zu machen, können Sie wie folgt vorgehen. (Hinweis: Dies ist kein getesteter Code und der Beispiel-Car-Dienst ist schreibgeschützt.) Zuerst erstellen Sie Daten als ClientEntity. Sie tun z.B. mit

ClientComplexValue manufacturer = of.newComplexValue("Manufacturer"); 
manufacturer.add(of.newPrimitiveProperty("Name", of.newPrimitiveValueBuilder().buildString("Ford"))); 

Dann senden Sie die POST-Anfrage

ODataEntityCreateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityCreateRequest(absoluteUri, manufacturer); 
ODataEntityCreateResponse<ClientEntity> response = request.execute(); 

Das ist also nicht mit POJO Klassen - der Ergebnistyp ist ClientEntity, die die Daten als Name/Wert-Karten präsentiert. Es gibt bereits eine weitere offene Frage zu diesem speziellen Thema bei Olingo - Create strongly typed POJOs for client library of OData service und ich schlage vor, dass wir dort einschalten, das zu verfolgen.

+0

Mit OData-client-Core-Version 4.0.0-beta-01: ODataClient-Client = ODataClientFactory.getV4(); (oder xxx.getV3()) –

0

Für SDL OData framework können Sie diese Github Test class zur Verwendung von OData Client überprüfen.

SDL OData Rahmen auf den EDM-Klassen beruht, und ein einfaches Beispiel alle Produkte zu erhalten (Produkt Edm Entity) wird wie

aussieht
// Create and configure the client 
DefaultODataClient client = new DefaultODataClient(); 
client.configure(componentsProvider); 

//Build the query 
ODataClientQuery query = new BasicODataClientQuery.Builder().withEntityType(Product.class).build(); 

//Execute the query 
List<Object> entities = (List<Object>) client.getEntities(requestProperties, query);