0

我在 android 客户端消费者中调用 odata4j 中的 ext 函数时遇到问题。例如 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) 访问。还是我错了?是否有任何示例如何获取函数响应并访问其数据。任何人都可以帮我解决这个问题。非常感谢你。

吉里

4

2 回答 2

0

我遇到了同样的问题。正如异常错误消息所建议的那样,Odata4j 0.5 当前不处理来自函数调用的响应。如果您查看源代码,您将看到。

于 2012-02-03T13:01:02.773 回答
0

在您创建 ODataConsumer 的位置,添加对.setFormatType(FormatType.JSON).

问题是 ATOM 类型不支持解析器,但JSON类型支持解析器。

于 2015-05-13T00:49:02.600 回答