我将 Apache Olingo 用作 Java SDK 的 OData 客户端,我将为 RESTful OData API 提供该客户端。在 SDK 中,我希望能够使用强类型类来表示 OData 实体。我很难轻松实现这一点,因此觉得我在这里错过了不同的策略。
Olingo 的方式似乎是获取一个ODataClient
对象,该对象为用户提供了一系列与 API 交互的有用方法。正在使用ODataClient
一堆工厂方法来构建我的请求。例如,这是我用来Customers
从 Northwind 示例 OData 服务获取的代码。client
是必要ODataClient
类的一个实例。
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());
}
我想从迭代器(即Customer customer = iterator.next()
)中得到一个强类型实体。但是,我不确定如何实际做到这一点。
如果我创建一个Customer
扩展ODataEntity
并尝试执行强制转换的类,Customer customer = (Customer) iterator.next()
那么我会得到一个ClassCastException
,因为迭代器中的对象只是ODataEntity
对象并且对子类一无所知Customer
。
我的下一个想法是引入泛型,但这样做似乎需要对 Olingo 库进行大量修改,这使我认为有更好的方法来做到这一点。
我正在使用 Apache Olingo 4 的开发版本,因为 OData 服务必须使用 OData 4。
我错过了什么?