0

我在运行以下用于从 openERP 浏览联系人的 java 代码时遇到问题,第一部分运行没有问题,登录部分完成,但我在线上遇到异常

Object c = client.execute("execute", arg);

说是选角有问题...

import java.net.URL;
import java.util.Vector;

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class Browse {

public static void main(String args[]) throws Exception {
// USEFUL ONLY LOCALLY WITH IN THE SERVER
Vector params1 = new Vector();
params1.addElement("TS_DB");
params1.addElement("alaa");
params1.addElement("123456");

XmlRpcClient xmlrpcLogin = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigLogin = new XmlRpcClientConfigImpl();
xmlrpcConfigLogin.setEnabledForExtensions(true);
xmlrpcConfigLogin.setServerURL(new URL("http", "10.0.0.177", 8069, "/xmlrpc/common"));
xmlrpcLogin.setConfig(xmlrpcConfigLogin);

Object id = xmlrpcLogin.execute("login", params1);
System.out.println("Login Id : " + id.toString());

System.out.println("------------------------");

XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setEnabledForExtensions(true);
clientConfig.setServerURL(new URL("http", "10.0.0.177", 8069, "/xmlrpc/object"));
client.setConfig(clientConfig);

// Object[] params2 = { "parner_id", "name" };
Object[] params2 = { 11 };
Vector<Object> params = new Vector<Object>();
params.add(params2);
Vector<Object> arg = new Vector<Object>();
arg.add("TS_DB");
arg.add(1);
arg.add("alaa");
arg.add("res.partner.address");
arg.add("browse");
// arg.add(24);
arg.add(params2);

Object c = client.execute("execute", arg);
// System.out.println("partner addressees with partner Id 24 :");
// for (Object obj : ids) {
// int a = Integer.parseInt(obj.toString());
// System.out.println(a);
// }

}
}

我得到以下异常:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    at org.apache.xmlrpc.parser.XmlRpcResponseParser.addResult(XmlRpcResponseParser.java:61)
    at org.apache.xmlrpc.parser.RecursiveTypeParserImpl.endValueTag(RecursiveTypeParserImpl.java:78)
    at org.apache.xmlrpc.parser.XmlRpcResponseParser.endElement(XmlRpcResponseParser.java:186)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2939)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:186)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:158)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:147)
    at Browse.main(Browse.java:47)
4

2 回答 2

2

您必须将用户 ID 传递给 arg 向量。您通过登录数据库获得的用户 ID 必须提供给 arg 向量,以便调用特定方法。但是,是的,它必须显示除该强制转换异常之外的其他一些异常,但我不知道为什么会出现该错误。但解决方案很简单,只需替换语句:

arg.add(1);

有了这个:

arg.add(id);

以上id设置如下:

Object id = xmlrpcLogin.execute("login", params1);
于 2012-09-28T05:41:06.143 回答
0

据我所知,xmlrpc 无法返回 openerp 的浏览方法返回的对象。所以你必须使用相同的读取方法。

于 2012-06-22T08:06:51.423 回答