我在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
你好,不幸的是,我不能爲你提出所有問題的寶貴答案。我只知道版本(0.7)不應該處理函數/動作調用。所以答案是否定的。什麼時候會?我會說它可能是odata4j-0.9.0的一部分。作爲參考,你可以看到這個開放的問題:code.google.com/p/odata4j/issues/detail?id=224(我被迫使用maven構建它,沒有測試運行) – tsykora 2013-06-07 11:42:41