【问题标题】:XMLRPC java insert issueXMLRPC java插入问题
【发布时间】:2012-06-20 04:36:35
【问题描述】:

我正在尝试使用 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();
        }

感谢任何帮助

【问题讨论】:

    标签: java xml-rpc


    【解决方案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”

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

    【讨论】:

      【解决方案2】:

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

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

      更多可以看OE and 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());
      
      }
      

      }

      【讨论】:

      • 感谢反馈堵塞......我已经编辑了我的代码来调用对象......编辑的代码在线程中更新......现在我得到“线程“主”java中的异常.lang.NullPointerException" on line res_create = client_1.execute("execute", params_create);
      【解决方案3】:

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

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

      【讨论】:

      • 1 实际上是登录用户的用户ID。我尝试提供以下代码,但得到相同的错误 Object[] params_create = new Object[]{"erp_performance", res, "admin", "res.partner", "create", vals};
      • 当我开始研究 xmlrpc 时,我已经面临类似的问题好几天了。然后在发送预期的参数类型时,问题就解决了。了解他们期望的类型。如果该方法需要 String 并且我们传递一个 int,它将抛出一个错误。
      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 2014-08-19
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多