如何使用Olingo或SDL OData Framework在Java中使用OData4服务

时间:2016-02-09 17:03:03

标签: java odata olingo

我需要从Java使用OData4服务,并根据OData website上的框架列表,OlingoSDL Odata Framework这两个选项。我的问题是,这两个项目的文档都专注于编写一个不消费的服务。 Olingo网站链接到2014年的博客文章,该文章与当前版本不兼容API,我无法在SDL github页面上找到任何内容。

如果有人可以通过使用适当的POJO对象模型向我提供一个简单的POST / GET示例,那就很棒。

我有限的理解是OData将有关实际对象模型的任何信息从编译时移动到客户端上的运行时。我很乐意忽略这一点并针对固定对象模型进行编码,因为我们使用的服务不会发生变化。

2 个答案:

答案 0 :(得分:8)

Olingo似乎忽略了客户端API的文档。 但是样本/客户端的GIT repository中有一个例子。

基本上对于GET,您可以执行以下操作:

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,您可以执行以下操作。 (注意,这不是经过测试的代码,示例Car服务是只读的。) 首先,您将数据构建为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 我建议我们转而关注这一点。

答案 1 :(得分:0)

对于SDL OData framework,您可以查看Github Test class有关如何使用OData客户端的信息。

SDL OData框架基于EDM类,一个简单的例子可以让所有产品(Product Edm Entity)看起来像

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