Как запросить данные JSON из операции службы OData с использованием OData4J?
Я пытаюсь запросить службу 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 ответ
В настоящее время ( начиная с версии 0.5) - вы можете использовать callFunction для вызова сервисной операции.
Посмотрите FunctionTest.java для репозитория odata4j Github для примера.
Надеюсь, это поможет,
- Джон