вызов потребительской функции odata4j

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

МЕТАДАННЫЕ функции:

<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). Или я ошибаюсь? Есть ли пример, как получить ответ функции и получить доступ к ее данным. Может ли кто-нибудь помочь мне с этим, пожалуйста. Спасибо большое.

Иржи


person user1135839    schedule 27.01.2012    source источник
comment
Здравствуйте, к сожалению, я не могу дать вам ценные ответы на все ваши вопросы. Я только знаю, что версия (0.7) еще не должна обрабатывать вызовы функций/действий. Так что ответ нет. Когда это будет? Я бы сказал, что это может быть частью odata4j-0.9.0. Для справки вы можете увидеть эту открытую проблему: code.google.com/p/odata4j/issues/detail?id=224 (я был вынужден построить ее с помощью maven без запуска тестов)   -  person tsykora    schedule 07.06.2013


Ответы (2)


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

person Wei Fang    schedule 03.02.2012
comment
ну наверное ты прав. Питти, надеюсь, что это будет поддерживаться в следующем выпуске. Так что мне придется анализировать результат самостоятельно. Спасибо, в любом случае - person user1135839; 07.02.2012

При создании ODataConsumer добавьте вызов .setFormatType(FormatType.JSON).

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

person Marek    schedule 13.05.2015