我正在编写一个java程序,我希望使用xmlrpc模拟与远程过程调用的客户端 - 服务器关系。
但是,当我尝试远程调用该方法时,我收到此错误消息:
'JavaClient:XML-RPC Consumer Fault#java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Integer'
这是客户端产生错误的方法:
public String getHashsize() {
// Execute the remote call, using the handler
try
{
argHashsize = new Vector(); //see next method for comments
argHashsize.addElement(serverURL);
// make the call
String callit = ("GetSize.sendHashSize");
sizeHash = (Integer)client.execute(callit, argHashsize );
}
// Use XmlRpcException errors
catch (XmlRpcException exception) {
System.err.println("JavaClient: XML-RPC Consumer Fault #" +
Integer.toString(exception.code) + ": " +
exception.getCause() + "" + exception.toString());
} catch (Exception exception) {
System.err.println("JavaClient: XML-RPC Consumer Fault #" + exception.toString());
}
String StrsizeHash = Integer.toString(sizeHash); // Cast sizeHash to String
return StrsizeHash;
}
这是我试图调用的方法:
public String sendHashSize(String getCaller) {
// send back info to Message Broker
sendbackserverdata = "number of staff: " + theHashtable.noStaff()
+ " Caller: " + getCaller
+ " Port: " + getServerPort()
+ " " + getSendtime();
//Store server info in Hashtable persist - could be a database
/*persist.put("" + theHashtable.noStaff(),"" + sendbackserverdata);
sendServerData = sendbackserverdata;
stats.StoreinStatsHashtable("" + theHashtable.noStaff(), sendbackserverdata);*/
return sendbackserverdata; // return to Consumer
}
答案 0 :(得分:5)
您的sendHashSize
方法会返回String
。它甚至不是整数的字符串表示 - 它是以“工作人员数量:”开头的字符串。
我对此失败并不感到惊讶 - 您只希望它能够正常工作,这一点令人惊讶。你会期望得到哪个整数?
更改sendHashSize
以返回int
/ Integer
(可能是theHashtable.noStaff()
?),或者避免尝试将其投放到Integer
上侧。
此外,此代码具有误导性:
catch (Exception exception) {
System.err.println("JavaClient: XML-RPC Consumer Fault #" + exception.toString());
}
不“XML-RPC消费者错误” - 您已经抓住了上一行中的那些错误。你有一个例外,因为你试图将String
转换为Integer
...这与XML-RPC层无关。
答案 1 :(得分:1)
而不是:
sizeHash = (Integer)client.execute(callit, argHashsize );
尝试:
sizeHash = Integer.valueOf(client.execute(callit, argHashsize ));
当然,您必须确保发送真实的整数,否则您将尝试将非整数字符串转换为整数(NumberFormatException)时出现异常。
首选方法:
方法sendHashSize()
应该返回一个int / Integer - 然后你不必强制转换为Integer或使用Integer.valueOf()
答案 2 :(得分:0)
sendHashSize()方法应该改为使用以下代码:
public int sendHashSize(String getCaller)
{
// return to Consumer
return theHashtable.noStaff();
}