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