вызов функции потребителя odata4j - PullRequest
0 голосов
/ 27 января 2012

У меня проблема с вызовом функции ext в odata4j в клиентском клиенте Android.Например, функция «Фильмы» общественной службы Netflix.

METADATA функции:

<FunctionImport Name="Movies" EntitySet="Titles" ReturnType="Collection(Netflix.Catalog.v2.Title)" m:HttpMethod="GET"/>

и мой код:

ODataConsumer c = ODataConsumer.create("http://odata.netflix.com/Catalog/");
c.dump.all(true);
Enumerable<OObject> e = c.callFunction("Movies").execute();

С этим методом callFunction заканчиваетсяошибка.

01-27 10:03:49.796: E/AndroidRuntime(264): Uncaught handler: thread main exiting due to uncaught exception 
01-27 10:03:49.815: E/AndroidRuntime(264): java.lang.NoSuchMethodError: org.w3c.dom.Text.getTextContent
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.core4j.xml.XContainer.parseNode(XContainer.java:67)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.core4j.xml.XDocument.<init>(XDocument.java:26)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.core4j.xml.XDocument.load(XDocument.java:90)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.core4j.xml.XDocument.parse(XDocument.java:73)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.odata4j.consumer.ODataClient.dumpResponseBody(ODataClient.java:263)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.odata4j.consumer.ODataClient.doXmlRequest(ODataClient.java:247)
01-27 10:03:49.815: E/AndroidRuntime(264):  at org.odata4j.consumer.ODataClient.getMetadata(ODataClient.java:69)
...

Интересно, что когда я удаляю строку с помощью c.dump.all (true), callFunction работает без ошибок, но не может получить доступ к данным.

01-27 13:25:33.795: E/AndroidRuntime(534): Caused by: java.lang.UnsupportedOperationException: Not supported yet.
01-27 13:25:33.795: E/AndroidRuntime(534):  at org.odata4j.format.FormatParserFactory$AtomParsers.getCollectionFormatParser(FormatParserFactory.java:125)
01-27 13:25:33.795: E/AndroidRuntime(534):  at org.odata4j.format.FormatParserFactory.getParser(FormatParserFactory.java:52)
01-27 13:25:33.795: E/AndroidRuntime(534):  at org.odata4j.consumer.ConsumerFunctionCallRequest$FunctionResultsIterator.advance(ConsumerFunctionCallRequest.java:196)
01-27 13:25:33.795: E/AndroidRuntime(534):  at org.core4j.ReadOnlyIterator.hasNext(ReadOnlyIterator.java:48)
...

Я не уверен, правильно ли я понимаю метод callFunction.В записи метаданных функции есть атрибуты EntitySet и ReturnType, но я полагаю, что могу получить доступ к результату как OObject (s).Или я не прав?Есть ли пример, как получить ответ функции и получить доступ к ее данным.Может ли кто-нибудь помочь мне с этим, пожалуйста.Большое спасибо.

Иржи

Ответы [ 2 ]

0 голосов
/ 13 мая 2015

Когда вы создаете ODataConsumer, добавьте вызов к .setFormatType(FormatType.JSON).

Проблема в том, что анализатор не поддерживается для типа ATOM, но равен для типа JSON.

0 голосов
/ 03 февраля 2012

Я встретил ту же проблему. Как указывается в сообщении об ошибке исключения, Odata4j 0.5 в настоящее время не обрабатывает ответ от вызова функции. Если вы посмотрите на исходный код, вы увидите.

...