2016-02-09 52 views
5

消耗在Java中OData4服務,我需要消耗從Java的OData4服務和基礎架構上的OData website兩個選項的列表上是OlingoSDL Odata Framework。我的問題是這兩個項目的文檔都側重於編寫不消耗服務的服務。 Olingo網站鏈接到2014年的博客文章,與當前版本不兼容,我無法在SDL github頁面上找到任何內容。我如何使用或者Olingo或SDL的OData框架

如果有人可以給我提供一個簡單的POST/GET示例,並使用適當的POJO對象模型,那將是非常棒的。

我有限的理解是,OData會將有關實際對象模型的任何信息從編譯時間移到客戶端上的運行時間。我很高興忽略這一點,並針對固定對象模型進行編碼,因爲我們使用的服務不會改變。

回答

6

客戶端API的文檔似乎有點被Olingo忽視。 但是樣本/客戶端的GIT repository中有一個示例。

基本上是一個讓你做到以下幾點:

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()); 
} 

看一看在Olingo代碼庫樣品得到進一步的細節如何 檢索元數據,過程中的所有特性等

要執行POST,您可以執行以下操作。 (注意,這不是測試代碼,並且示例汽車服務是隻讀的。) 首先,您將數據構建爲ClientEntity。你可以做與

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

然後發送POST請求

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

因此,這不是與POJO類 - 結果類型爲ClientEntity,其中介紹了數據的名稱/值映射。 關於該特定主題已有另一個未解答的問題,在 Olingo - Create strongly typed POJOs for client library of OData service 我建議我們轉到那裏跟進。

+0

用的OData客戶端的核心版本4.0.0-β-01: ODataClient客戶端= ODataClientFactory.getV4(); (或xxx.getV3()) –

0

對於SDL OData framework,您可以檢查此Github Test class如何使用OData客戶端。

SDL的OData框架是基於EDM類和一個簡單的例子來獲取所有產品(產品EDM實體)看起來像

// 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);