如何使用 OData4J 从 OData 服务操作请求 JSON 数据?

发布于 2024-12-11 21:41:18 字数 1571 浏览 1 评论 0原文

我正在尝试使用 odata4j 库从 Java 查询 WCF OData 服务。如果我使用 ATOM 格式查询实体,一切正常。如果我切换到 JSON,Java 会抛出以下异常:

java.lang.RuntimeException: java.lang.RuntimeException: EdmEntitySet GetStatesViewData?gac=0 not found
    at org.core4j.ReadOnlyIterator.hasNext(ReadOnlyIterator.java:49)
    at org.core4j.Enumerable$FuncIterator.hasNext(Enumerable.java:487)
    at org.core4j.Enumerable$FuncIterator.hasNext(Enumerable.java:487)
    at ... Caused by: java.lang.RuntimeException: EdmEntitySet GetStatesViewData?gac=0 not found at org.odata4j.edm.EdmDataServices.getEdmEntitySet(EdmDataServices.java:40)
at org.odata4j.internal.EdmDataServicesDecorator.getEdmEntitySet(EdmDataServicesDecorator.java:31)
at org.odata4j.format.json.JsonFeedFormatParser.parse(JsonFeedFormatParser.java:99)
at org.odata4j.format.json.JsonFeedFormatParser.parse(JsonFeedFormatParser.java:21)
at org.odata4j.consumer.OQueryRequestImpl$EntryIterator.advance(OQueryRequestImpl.java:192)
at org.core4j.ReadOnlyIterator.hasNext(ReadOnlyIterator.java:47)
... 10 more

以下代码产生此异常:ODataConsumer odc =

ODataConsumer.create(FormatType.JSON, "http://localhost:6000/");
        Iterator<OEntity> iterator = odc.getEntities("GetStatesViewData?gac=0").execute();
for(OEntity entity: entities)
{
..
}

OData4j 无法找到实体“GetStatesViewData?gac=0”,但这样的属性不存在。存在的是接受参数“gac”的服务操作“GetStatesViewData”。是否可以使用 OData4j 调用带参数的服务操作?

如果我使用 Fiddler 或其他 Web 调试器,向此 OData 服务发送带有“accept: application/json”标头的 HTTP 请求,我通常会获得 JSON 提要。所以 OData4j 或我的代码中有问题,OData 服务器似乎没问题。

I am trying to query a WCF OData service from Java using the odata4j library. If I query a entity using ATOM format, everything is OK. If I switch to JSON, Java throws following exception:

java.lang.RuntimeException: java.lang.RuntimeException: EdmEntitySet GetStatesViewData?gac=0 not found
    at org.core4j.ReadOnlyIterator.hasNext(ReadOnlyIterator.java:49)
    at org.core4j.Enumerable$FuncIterator.hasNext(Enumerable.java:487)
    at org.core4j.Enumerable$FuncIterator.hasNext(Enumerable.java:487)
    at ... Caused by: java.lang.RuntimeException: EdmEntitySet GetStatesViewData?gac=0 not found at org.odata4j.edm.EdmDataServices.getEdmEntitySet(EdmDataServices.java:40)
at org.odata4j.internal.EdmDataServicesDecorator.getEdmEntitySet(EdmDataServicesDecorator.java:31)
at org.odata4j.format.json.JsonFeedFormatParser.parse(JsonFeedFormatParser.java:99)
at org.odata4j.format.json.JsonFeedFormatParser.parse(JsonFeedFormatParser.java:21)
at org.odata4j.consumer.OQueryRequestImpl$EntryIterator.advance(OQueryRequestImpl.java:192)
at org.core4j.ReadOnlyIterator.hasNext(ReadOnlyIterator.java:47)
... 10 more

The following code produced this exception:ODataConsumer odc =

ODataConsumer.create(FormatType.JSON, "http://localhost:6000/");
        Iterator<OEntity> iterator = odc.getEntities("GetStatesViewData?gac=0").execute();
for(OEntity entity: entities)
{
..
}

OData4j is not able to find an entity "GetStatesViewData?gac=0", but such a property does not exist. What exists is a service operation "GetStatesViewData" which accepts a parameter "gac". Is it possible to call a service operation with parameters using OData4j?



If I use Fiddler or some other web debugger, send a HTTP request with a "accept: application/json" header to this OData Service, I normally get the JSON feed. So there is something wrong either in OData4j or in my code, the OData server seems to be OK.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不离久伴 2024-12-18 21:41:18

目前(从版本 0.5 开始) - 您可以使用 callFunction 调用服务操作。

请参阅 odata4j Github 存储库上的 FunctionTest.java 作为示例。

希望有帮助,

-约翰

Currently (as of version 0.5) - you can use callFunction to call a service operation.

See FunctionTest.java on the odata4j Github repo for an example.

Hope that helps,

- john

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文