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 return のメソッドを参照するオブジェクトを返すことができません。そのため、同じために read メソッドを使用する必要があります。

于 2012-06-22T08:06:51.423 に答える