2012-01-27 3 views
0

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

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

Jiri

+1

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

ответ

0

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

+0

ну, вы, вероятно, правы. Питти, надеюсь, что он будет поддержан в следующем выпуске. Поэтому мне придется разобрать результат сам. Спасибо, в любом случае – user1135839

0

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

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