4

我正在尝试使用 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 服务器似乎没问题。

4

1 回答 1

3

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

有关示例,请参阅odata4j Github 存储库上的 FunctionTest.java 。

希望有帮助,
-约翰

于 2011-11-26T14:36:34.973 回答