2012-01-15 69 views
1

所以我試圖發送一個XML-RPC消息摩西在Java的XML-RPC服務器,但一直得到錯誤:發送複雜類型與Apache XML RPC客戶端3.1.3

org.apache.xmlrpc.XmlRpcException: Parameter that is supposed to be a structure is not 

我使用來自http://ws.apache.org/xmlrpc/client.html的Apache xmlrpc客戶端3.1.3。 我的猜測是參數定義不兼容,但在用不同類型作爲輸入進行試驗後,輸出仍然是相同的。我有客戶端的例子,但是它用Perl編寫:

#!/usr/bin/env perl 

use Encode; 
use XMLRPC::Lite; 
use utf8; 

$url = "http://localhost:8080/RPC2"; 
$proxy = XMLRPC::Lite->proxy($url); 

$text = "il a souhaité que la présidence trace à nice le chemin pour l' avenir ."; 

# Work-around for XMLRPC::Lite bug 
$encoded = SOAP::Data->type(string => Encode::encode("utf8",$text)); 

my %param = ("text" => $encoded, "align" => "true"); 
$result = $proxy->call("translate",\%param)->result; 
print $result->{'text'} . "\n"; 
if ($result->{'align'}) { 
    print "Phrase alignments: \n"; 
    $aligns = $result->{'align'}; 
    foreach my $align (@$aligns) { 
     print $align->{'tgt-start'} . "," . $align->{'src-start'} . "," 
      . $align->{'src-end'} . "\n"; 
    } 
} 

這裏是我的代碼:

XmlRpcClientConfigImpl tConf = new XmlRpcClientConfigImpl(); 
try { 
    tConf.setServerURL(new URL("http://127.0.0.1:8080/RPC2")); 
    tConf.setBasicEncoding("UTF-8"); 
} catch (MalformedURLException ex) { 
    ex.printStackTrace(System.out); 
} 
XmlRpcClient tClient = new XmlRpcClient(); 
tClient.setConfig(tConf); 

List<List<String>> tInPar = new ArrayList<>(); 
tInPar.add(Arrays.asList(new String[]{"text", "hello"})); 
tInPar.add(Arrays.asList(new String[]{"align", "true"})); 

String tResult = null; 
try { 
    tResult = (String) tClient.execute("translate", tInPar); 
} catch (XmlRpcException ex) { 
    ex.printStackTrace(System.out); 
} 

它是正確的嗎?

感謝您的幫助

回答

0

我不知道Java並且無法檢查您的代碼。如果您的客戶端除了通過SOAP傳輸XML之外還有其他連接方法,請使用它!對於我以前見過的任何SOAP和大多數XML API都是如此。

您是否運行該Perl代碼並驗證它是否正常工作?

如果確實如此:請添加一些調試以查看它的功能並將其與您的腳本進行比較。 XMLRPC ::精簡版使用要求

use SOAP::Lite +trace;

三次機會時要基於SOAP ::精簡版,其擁有的調試:首先,加入這一行啓用調試也爲XMLRPC ::精簡版。第二:將「+ trace」標誌添加到「使用XMLRPM :: Lite」行以啓用調試。第三:在調用XMLRPC :: Lite時,SOAP調試是不可能的。

看看這裏的更多信息:http://metacpan.org/pod/SOAP::Trace

最後,像tcpdump的數據包嗅探器可以顯示你正在傳輸的內容。

我懷疑你的XML結構不同於Perl,或者它們只有空白,換行符或元素順序的不同,而另一方的服務器不接受真正的XML,而是包含關鍵字的文本塊<>。

+0

首先,感謝您的回覆,併爲後期的答覆遺憾。不幸的是,服務器只提供XML-RPC作爲通信協議。幸運的是,服務器創建者向我展示了XML-RPC的java客戶端示例,因此回答了此問題。我會在任何感興趣的人的回答中發佈鏈接到java客戶端示例。乾杯 – ndriks 2012-01-17 13:43:37

相關問題