0

我正在尝试使用 XMLPRC 和 java 将客户详细信息插入 OpenERP 服务器。我能够进行身份验证。但是,当我通过传递参数调用执行方法来插入记录时,在线程“main”java.lang.NullPointerException 中出现异常 res_create = client_1.execute("execute", params_create);

请在下面找到我的代码


    res = client.execute("login", params);

        String url_1 = "http://agilewebdevelopment.net:8514/xmlrpc/object";
        XmlRpcClientConfigImpl config_1 = new XmlRpcClientConfigImpl();
        try {
            config_1.setServerURL(new URL(url_1));
        } catch (MalformedURLException e) {
            System.out.println("First");
            e.printStackTrace();
        }
        System.out.println(res);
        HashMap<String, Object> vals = new HashMap<String, Object>();
        vals.put("name", "Mantavya Gajjar");
        vals.put("ref", "MGA");
        XmlRpcClient client_1 = new XmlRpcClient();
        client.setConfig(config_1);
        Object[] params_create = new Object[]{"erp_performance", "1", "admin", "res.partner", "create", vals};

        Object res_create = null;
        try {
             res_create = client_1.execute("execute", params_create);
        } catch (XmlRpcException e) {
            e.printStackTrace();
        }

任何帮助表示赞赏

4

3 回答 3

1

如果您使用的是 java 1.4,则它无法自动装箱。所以可以试试这个

Object[] params_create = new Object[]{"erp_performance", "1", "admin", "res.partner", "create", vals};

只需在字符串中传递 uid

或者

也有可能是登录你必须使用“http://localhost:8069/xmlrpc/common”,而对象方法你必须使用“http://localhost:8069/xmlrpc/object”

检查两者,您将获得解决方案。

于 2012-06-20T05:26:36.083 回答
0

尝试了解您需要发送的参数以执行该操作。由于参数不匹配,您正面临此错误。

您确定1要发送的实际上是整数或字符串吗?一旦你确定了预期参数的类型,你就可以摆脱这个异常。

于 2012-06-20T04:48:44.090 回答
0

如果您能够进行身份验证,这意味着您有工作的 XMLRPC 连接,那么现在在身份验证的情况下,您将使用的 OpenERP 服务是通用服务,因此您将拥有客户端对象,该对象将http://host:posrt/xmlrpc/common是完全正确的代理。

但是,如果您想对任何 OE 模型执行任何操作,那么对于该 OE 提供单独的服务即OBJECT服务,因此在这种情况下,您的客户端对象必须是代理http://host:port/xmlrpc/object,然后您可以对其调用执行方法,您可以看到我们这样做没有为链接http://bazaar.launchpad.net/~openerp/openobject-server/trunk/view/head:/openerp/service/web_services.py#L379上的公共服务实现执行方法

更多可以看OE和JAVA

我已经准备了一些你试试的scartch代码以防万一

package com.xmlrpc.client;

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

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

public class Create {

public static void main(String args[]) throws Exception {

Vector params1 = new Vector();
params1.addElement("openerpdb");
params1.addElement("admin");
params1.addElement("admin");

XmlRpcClient xmlrpcLogin = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigLogin = new XmlRpcClientConfigImpl();
xmlrpcConfigLogin.setEnabledForExtensions(true);
xmlrpcConfigLogin.setServerURL(new URL("http", "localhost", 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", "localhost", 8069, "/xmlrpc/object"));
client.setConfig(clientConfig);

HashMap<Object, Object> params = new HashMap<Object, Object>();

params.put("street", "Edamon3");
params.put("partner_id", "24");
params.put("city", "Punalur3");
params.put("name", "ShameerHabeeb3");

Vector<Object> arg = new Vector<Object>();

arg.add("openerpdb");
arg.add(1);
arg.add("admin");
arg.add("res.partner.address");
arg.add("create");
arg.add(params);

Object ret_id = client.execute("execute", arg);
System.out.println("Created new partner address with id :" + ret_id.toString());

}

}

于 2012-06-20T06:52:24.333 回答