2014-06-30 24 views
7

istemci kütüphanesi için kesinlikle yazılı POJOs oluşturun. SDK'da, OData öğelerini temsil etmek için güçlü yazılan sınıflara sahip olmak istiyorum. Bunu kolayca uygulamakta zorlanıyorum ve bu yüzden burada farklı bir stratejiyi kaçırıyormuşum gibi hissediyorum.Olingo - Ben bir sığınakta OData API sağlayacak bir Java SDK için bir OData istemcisi olarak Apache Olingo kullanıyorum OData hizmeti

Olingo yolu API ile etkileşim için yararlı olan yöntemlerin bir grup kullanıcıya sunan bir ODataClient nesne elde etmek gibi görünüyor. ODataClient, isteğimi oluşturmak için bir sürü fabrika yöntemi kullanıyor. Örneğin, Northwind örnek OData hizmetinden Customers almak için kullandığım kod budur. client, gerekli ODataClient sınıfının bir örneğidir.

String serviceRoot = "http://services.odata.org/V4/Northwind/Northwind.svc"; 
URI customersUri = client.newURIBuilder(serviceRoot) 
     .appendEntitySetSegment("Customers").build(); 
ODataRetrieveResponse<ODataEntitySetIterator<ODataEntitySet, ODataEntity>> response = 
     client.getRetrieveRequestFactory().getEntitySetIteratorRequest(customersUri).execute(); 

if (response.getStatusCode() >= 400) { 
    log("Error"); 
    return; 
} 

ODataEntitySetIterator<ODataEntitySet, ODataEntity> iterator = response.getBody(); 

while (iterator.hasNext()) { 
    ODataEntity customer = iterator.next(); 
    log(customer.getId().toString()); 
} 

Ben İlerleticiden kesinlikle yazılı bir varlık (yani Customer customer = iterator.next()) ile bitirmek istiyorum. Ancak, aslında bunu nasıl yapacağımı bilmiyorum. Ben ODataEntity uzanan bir Customer sınıf oluşturmak ve Customer customer = (Customer) iterator.next() sonra bir ClassCastException olsun gibi yineleyici nesneler sadece ODataEntity nesneleri olduğundan bir döküm gerçekleştirmek girişiminde ve Customer alt sınıf hakkında hiçbir şey biliyorsanız

.

Bir sonraki düşünce Generics'i tanıtmak oldu ama bunu yaparken bunu yapmak için daha iyi bir yol olduğunu düşünmeme neden oldu Olingo kütüphaneye modifikasyon iyi bir miktar gibi görünüyor gerektirecektir.

ben ben eksik OData 4.

kullanmalıdır OData hizmeti beri Apache Olingo 4 geliştirme sürümünü kullanıyorum?

cevap

4

Gerçekten reklamı ama Olingo bir POJO jeneratör ext/pojogen-maven-plugin de source tree yılında, günümüzde var değildir. Maalesef floş operasyon OData hizmeti ile bellek ve senkronizasyon önbelleğe varlıkları tutan farklı bir programlama modeli ile başka katman eklenir POJOs, kullanma. Olingos İstek Fabrikalarına dayanan daha geleneksel bir istek/cevap modeline uyarlamakla gerçekten ilgilenirim.

Ancak, bunu deneyebilirsiniz. Pompanıza pojogen-maven-plugin ve odata-client-proxy dahildir. POJO nesil ı src/main/resources/metadata.xml EDM Metadataof Olingo Araba örnek hizmetini saklanan deney için

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.8</version> 
     <executions> 
      <execution> 
       <phase>process-sources</phase> 
       <goals> 
        <goal>add-source</goal> 
       </goals> 
       <configuration> 
        <sources> 
         <source>${project.build.directory}/generated-sources</source> 
        </sources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.olingo</groupId> 
     <artifactId>pojogen-maven-plugin</artifactId> 
     <version>4.2.0-SNAPSHOT</version> 
     <configuration> 
      <outputDirectory>${project.build.directory}/generated-sources</outputDirectory> 
      <localEdm>${basedir}/src/main/resources/metadata.xml</localEdm> 
      <basePackage>odata.test.pojo</basePackage> 
     </configuration> 
     <executions> 
      <execution> 
       <id>v4pojoGen</id> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>v4pojoGen</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

ile pom içinde tetiklenebilir. Bir şekilde eklenti ojc-plugin klasörü arasında bir şey oluşturmak istiyor ve oluşturulan Java kodunu manuel olarak doğru yere taşıdım.

Bu noktada, EDM modelindeki her varlık veya karmaşık tür için bir Service.java ve Java arabiriminiz vardır.

Bu

Service<EdmEnabledODataClient> service = odata.test.pojo.Service.getV4("http://localhost:9080/odata-server-sample/cars.svc"); 
Container container = service.getEntityContainer(Container.class); 
for (Manufacturer m : container.getManufacturers()) { 
    System.out.println(m.getName()); 
} 
+0

kullandığım çalışılıyor hizmet meta verilerle çalışmaz eklenti gibi bazı varlıkları okumak için bunu kullanabilirler - bu karmaşık Net hizmet meta verileri ile test edilmiştir? –

+0

Bu @ https://issues.apache.org/jira/browse/OLINGO-885 –

+0

üzgünüm, ama bu her yerde herhangi bir docs bulamıyorum, o yüzden ... anlarsınız gidermek için bir JIRA yarattığı bu pojo jeneratör eğer odata v2 meta verileri için de çalışır? – Dominik