我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)
我想从迭代器(即Customer customer = iterator.next())中得到一个强类型实体.但是,我不确定如何实际做到这一点.
如果我创建一个Customer扩展ODataEntity并尝试执行转换的类,Customer customer = (Customer) iterator.next()那么我得到一个,ClassCastException因为迭代器中的ODataEntity对象只是对象而Customer对子类一无所知.
我的下一个想法是引入泛型,但这样做需要对Olingo库进行大量修改,这让我觉得有更好的方法来做到这一点.
我正在使用Apache Olingo 4的开发版本,因为OData服务必须使用OData 4. …
我在Tomcat中有一个webapp,它通过Apache Olingo公开OData端点.我在网上搜索了诸如swagger,olingo,integration等关键字但没有找到任何答案.
有一些关于.NET OData Swagger集成的信息,但我并不感兴趣.
请注意,我对Olingo和Swagger集成感兴趣,而不是Swaggersocket集成.
有谁知道Swagger是否支持Olingo集成?
编辑:Swagger UI是否与Olingo集成无缝协作?
我在我脑海里.
在最广泛的层面上,我试图将Odata接口暴露给由使用Mule编写的服务公开的现有数据池.当我调用我的Mule服务时,如果我检测到该URL是Odata格式,我想将处理委托给用Java编写的东西,然后将该组件的响应反馈给我的调用者.
我找到了Olingo和OData4j库.我的问题是,这些从构建Web服务开始.但这对我来说太过分了.我有一个Web服务.我需要了解的是我需要实现哪些组件才能将URL(我手头上的)传递给Odata解析器,而Odata解析器将调用数据提供程序.
我对这项技术感到有些失落.有人能指出我一个非常基本的教程,清楚地描述了这一点.或者,他们可以给我几个步骤:"你必须实现A,B和C,然后将你的URL传递给C.foo()"?
我已经尝试了两个库的入门文档,但它们都以"首先我们将实现一个Web服务"开头,并且没有清楚地描述(至少对我来说)离开的地方和纯粹的Odata设置.
谢谢.
我是apache olingo Web服务的新手。在过去的两周里,我为实现我的服务实施过滤和分页而罢工。我使用的是最新的olingo版本4。请帮助我提供示例代码。它将对我有更多用处。
以下是我的情况,
我从现有的Web服务获取数据作为XML,然后使用JAXB解析XML,使其成为olingo Web服务中的实体列表。
在这里我如何应用过滤器。如果我的URL中有$ filter,则它会引发找不到页面的异常。如果我删除那意味着它将工作并给出完整的结果。
我的问题是如何在XML字符串中应用olingo过滤器或如何在方法中将其应用于实体列表中。请给我一些示例代码。
我需要对响应JSON进行分页。我需要将JSON值限制为每页25个,并且还需要这样的下一页URL(对于25到50)。如何也实现这一点。
我克服了很多博客,但对我没有用。在这里 https://templth.wordpress.com/2015/04/03/handling-odata-queries-with-elasticsearch/
在这个博客中,他们没有用完整的代码进行解释。我的问题是,我正在从现有的Web服务获取数据作为XML字符串并对其进行解析,并将其包含在实体列表中。
我也推荐这个博客
https://olingo.apache.org/doc/odata2/tutorials/Olingo_Tutorial_AdvancedRead_FilterVisitor.html
在此博客中,他们还讲述了如何构造查询。我的问题是如何在Web服务中从ODATA实现$ filter,$ select等,以及如何从xml字符串或实体列表中进行过滤
请给我推荐示例代码。谢谢。
我一直在阅读 Olingo v4 服务器教程,我所看到的只是带有硬编码数据的示例。是否有将 v4 代码与某种类型的 sql 后端一起使用的示例。从我读过的内容来看,JPA 在 v4 中还不是一个选项。是否期望解析查询并将其转换为我将在我的实现中执行的 sql 语句?这背后是否有任何自动化?
更新:我一直在寻找一个名为JINQ的新库,这看起来很有希望。有没有人知道如何将这样的东西插入 Olingo v4?
我按照 Apache Lingo 教程中概述的步骤创建了一个示例 OData 服务。
客户收到的默认服务文档是:
{
"@odata.context" : "$metadata",
"value" : [
{
"name" : "Products",
"url" : "Products"
} ]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法配置 Olingo 以在文档中包含完整的元数据 uri?具体来说,假设服务正在http://localhost:8080/DemoService/DemoService.svc/运行,我希望服务文档如下:
{
"@odata.context" : "http://localhost:8080/DemoService/DemoService.svc$metadata",
"value" : [
{
"name" : "Products",
"url" : "Products"
} ]
}
Run Code Online (Sandbox Code Playgroud) 我有一个受基本HTTP身份验证保护的Web服务访问。
如何设置ODataClient将身份验证发送到Web服务?
ODataClient client = ODataClientFactory.getClient();
String iCrmServiceRoot = "https://example.dev/Authenticated/Service";
ODataServiceDocumentRequest odClientReq =
client.getRetrieveRequestFactory().getServiceDocumentRequest(iCrmServiceRoot);
Run Code Online (Sandbox Code Playgroud) 以罗斯文(Northwind)数据库为例,每个客户都有一组订单。我只想在一个请求中删除特定客户与其所有订单之间的所有引用。
看起来我可以做到这一点(基于spec),DELETE http://services.odata.org/V4/Northwind/Northwind.svc/Customers('ANTON')/Orders但是我想知道客户端库是否支持此功能。
我正在将Microsoft.OData.Client用于C#客户端库,将Apache Olingo(v4)用于Java,将BreezeJS用于JavaScript。任何这些示例都将不胜感激。
编辑:阐明我只是删除引用,而不是实际上删除实体本身。
我正在开发一个由 OData 服务支持的搜索功能。它将返回一个或一组标头对象作为结果。我们需要搜索的许多字段并不在 Header 对象中。它们仅存在于子对象(导航属性)中。能够对子字段执行 OData 搜索并仍然返回父对象列表的正确方法是什么。
这与我期望能够在标准 SQL 中作为“存在”查询执行的操作类似。
我在我的项目中使用 Java - Apache Olingo,但我相信这是一个一般的 OData 问题。
我需要从 Java 使用 OData V3 服务。
Apache Olingo 是 OData 唯一活跃的开源项目。但它似乎不支持 OData V3。我用谷歌搜索并发现了一些关于 Olingo V4 实际上通过方法支持 OData V3 的讨论,例如
ODataClientFactory.getEdmEnabledClientV3(...)
Run Code Online (Sandbox Code Playgroud)
但是我在当前的 Olingo Java 库中找不到这样的方法。
OData V3 的另外两个 Java 库似乎处于休眠状态:
Apache Olingo 是否支持 OData V3?