所以我試圖發送一個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);
}
它是正確的嗎?
感謝您的幫助
首先,感謝您的回覆,併爲後期的答覆遺憾。不幸的是,服務器只提供XML-RPC作爲通信協議。幸運的是,服務器創建者向我展示了XML-RPC的java客戶端示例,因此回答了此問題。我會在任何感興趣的人的回答中發佈鏈接到java客戶端示例。乾杯 – ndriks 2012-01-17 13:43:37