跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 关于java xmlrpc调用时的int参数遇到问题

关于java xmlrpc调用时的int参数遇到问题

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
12 帖子 5 发布者 6.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    lixuchao
    写于 最后由 编辑
    #2

    用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)

    1 条回复 最后回复
    0
    • Y 离线
      Y 离线
      yanggg1133
      写于 最后由 编辑
      #3

      java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

      java的问题。。不会

      1 条回复 最后回复
      0
      • A 离线
        A 离线
        alex1069010
        写于 最后由 编辑
        #4

        [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吧。

        1 条回复 最后回复
        0
        • L 离线
          L 离线
          lixuchao
          写于 最后由 编辑
          #5

          参数要求的是int,改成字符串不行。

          1 条回复 最后回复
          0
          • D 离线
            D 离线
            digitalsatori 管理员
            写于 最后由 编辑
            #6


            你的这个错误信息,我猜是RPC调用出错后,JAVA期待的是Integer类型错误返回值而实际的错误返回值是Sting Type引起的。
            的确是传入参数错误,to_user应该是一个Array List而不是Integer, 理论上你的python代码也会返回错误

            【上海先安科技】(tony AT openerp.cn)

            1 条回复 最后回复
            0
            • L 离线
              L 离线
              lixuchao
              写于 最后由 编辑
              #7

              现在情况是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)

              1 条回复 最后回复
              0
              • M 离线
                M 离线
                mrshelly
                写于 最后由 编辑
                #8

                换一个  Java XMLRPC 库试试...

                1 条回复 最后回复
                0
                • L 离线
                  L 离线
                  lixuchao
                  写于 最后由 编辑
                  #9

                  估计不是传入参数问题,
                  新写了个module里面的方法为:
                      def session_get(self, cr, uid, context=None):
                          return 10
                  没有调用参数,用python调用没问题,用java调用仍报错:java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

                  1 条回复 最后回复
                  0
                  • M 离线
                    M 离线
                    mrshelly
                    写于 最后由 编辑
                    #10

                    rpc 调用, 最好是 HTTP 抓包...

                    1 条回复 最后回复
                    0
                    • L 离线
                      L 离线
                      lixuchao
                      写于 最后由 编辑
                      #11

                      问题已解决。
                      调用时用 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();
                      }

                      1 条回复 最后回复
                      0

                      • 登录

                      • 没有帐号? 注册

                      • 登录或注册以进行搜索。
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 标签
                      • 热门
                      • 用户
                      • 群组