2012-01-27 83 views
0

我在android客户端使用者中调用odata4j中的ext函数时遇到问题。 例如Netflix公共服务的功能“电影”。odata4j消费者函数调用

元数据的功能:

<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)访问结果。或者我错了?有没有任何例子如何获得功能响应和访问其数据。 有没有人可以帮我解决这个问题。非常感谢你。

Jiri

+1

你好,不幸的是,我不能为你提出所有问题的宝贵答案。我只知道版本(0.7)不应该处理函数/动作调用。所以答案是否定的。什么时候会?我会说它可能是odata4j-0.9.0的一部分。作为参考,你可以看到这个开放的问题:code.google.com/p/odata4j/issues/detail?id=224(我被迫使用maven构建它,没有测试运行) – tsykora 2013-06-07 11:42:41

回答

0

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

+0

好吧,你可能是对的。 Pitty,希望它能在下一个版本中得到支持。所以我必须自己解析结果。不管怎么说,还是要谢谢你 – user1135839 2012-02-07 12:46:24

0

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

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