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

时间:2011-10-27 07:42:48

标签: json odata odata4j

我正在尝试使用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”,但这样的属性不存在。存在的是服务操作“GetStatesViewData”,它接受参数“gac”。是否可以使用OData4j调用带参数的服务操作?

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

1 个答案:

答案 0 :(得分:3)

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

有关示例,请参阅FunctionTest.java on the odata4j Github repo

希望有所帮助,
- 约翰