关于java xmlrpc调用时的int参数遇到问题
-
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
java的问题。。不会 -
[quote author=lixuchao link=topic=17147.msg30551#msg30551 date=1434618005]
用python的xmlrpclib调用没有问题。
代码段如下:
model="im_chat.session" ##要运行哪个类中的函数?
method="session_get" ##要运行的函数
result = sock.execute(dbname, uid, pwd,
model,method,5 )
print "\n==== %s of %s ====" % (model, method)
pprint(result)
[/quote]
python不是严格类型绑定的语言,java是,所以你老老实实用String吧。 -
你的这个错误信息,我猜是RPC调用出错后,JAVA期待的是Integer类型错误返回值而实际的错误返回值是Sting Type引起的。
的确是传入参数错误,to_user应该是一个Array List而不是Integer, 理论上你的python代码也会返回错误 -
现在情况是python能成功调用,java调用失败,另外,我写了一个module做了测试,返回结果是一个整数,出错提示相同。
python调用成功时返回结果是:
==== im_chat.session of session_get ====
{'state': 'closed',
'users': [{'id': 1, 'im_status': 'online', 'name': 'Administrator'},
{'id': 5, 'im_status': 'offline', 'name': u'\u674e\u6829\u8d85'}],
'uuid': '438e8348-0009-46b5-a411-229b19fe4967'}
有可能是java的xmlrpc不支持此种类型结果吗?
另外,把参数改成ArrayLlist后出错如下:
java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
at odootest.imchat.main(imchat.java:161) -
问题已解决。
调用时用 HashMap a = (HashMap) xmlrpc.execute("execute", params); "execute"改为"execute_kw"就有问题,不知两个有什么区别。
就可以。
程序段如下:
try{
XmlRpcClient xmlrpc = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfgDb = new XmlRpcClientConfigImpl();
xmlrpcConfgDb.setEnabledForExceptions(true);
xmlrpcConfgDb.setServerURL(new URL(
"http://localhost:8069/xmlrpc/object"));
xmlrpc.setConfig(xmlrpcConfgDb);
Object[] params = new Object[] { "sentai",1, "admin", "im_chat.session",
"session_get",5};
try {
HashMap a = (HashMap) xmlrpc.execute("execute", params);
System.out.println(a);
} catch (Exception e) {
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
}