Как запросить данные JSON из операции службы OData с использованием OData4J? - PullRequest
4 голосов
/ 27 октября 2011

Я пытаюсь запросить службу OData WCF из Java с помощью библиотеки odata4j.Если я запрашиваю объект, используя формат 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 или другой веб-отладчик, отправляю HTTP-запрос с заголовком «accept: application / json» этой службе OData, я обычно получаю фид JSON.Так что в OData4j или в моем коде что-то не так, сервер OData вроде бы в порядке.

1 Ответ

3 голосов
/ 26 ноября 2011

В настоящее время (начиная с версии 0.5) - вы можете использовать callFunction для вызова операции службы.

См. FunctionTest.java в репозитории odata4j Github пример.

Надеюсь, это поможет,- Джон

...