omnip620 / node-zookeeper-dubbo

A middleware helps node to communicate dubbo by using its default protocol, which is registered in zookeeper
300 stars 80 forks source link

从2.2.2升级到3.0.12出现问题 #84

Closed tonmy2012 closed 5 years ago

tonmy2012 commented 5 years ago

从2.2.2升级到3.0.12出现问题,是否调用方式有改变? Cannot read property '$class' of undefined [0] at Encode._argsType (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\encode.js:63:19) [0] at Encode._body (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\encode.js:35:19) [0] at new Encode (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\encode.js:10:21) [0] at Socket.invoke (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\socket.js:58:18) [0] at dispatcher.gain (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\service.js:61:12) [0] at Dispatcher.gain (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\socket.js:172:5) [0] at Service.execute (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\service.js:56:21) [0] at Promise (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\service.js:44:54) [0] at new Promise () [0] at Service.(anonymous function).args [as findByRoles] (F:\nodejs-workspace\cloud\pms\node_modules_node-zookeeper-dubbo@3.0.12@node-zookeeper-dubbo\libs\service.js:44:16)

omnip620 commented 5 years ago

没什么问题的我这边测试后 有没有更多的信息 提供一下我看看

tonmy2012 commented 5 years ago

image

这个是调试到service.js的截图。里面args是一个匿名方法。我调试过2.x的版本。这边args应该是转换成java对应类型的数组。

tonmy2012 commented 5 years ago

image 所以到这个位置就出现错误了,这位置的args还是上一个comment所示的匿名函数

tonmy2012 commented 5 years ago

@p412726700 help

omnip620 commented 5 years ago

3.x版本不再使 js-to-java 内置了 也就是说配置项里方法签名 直接这样写

 findById : (id) => [ {'$class': 'java.lang.Long', '$': id} ],
 findByName : (name) => [ java.String(name) ],
tonmy2012 commented 5 years ago

findByName : (name) => [ java.String(name) ],

按照这样写,出现java is not defined, 只能按照这种写法吗 findById : (id) => [ {'$class': 'java.lang.Long', '$': id} ],

tonmy2012 commented 5 years ago

'server error:' Error: non-error thrown: "Fail to decode request due to: RpcInvocation [methodName=findByRoles, parameterTypes=null, arguments=null, attachments={path=com.skio.api.dubbo.service.IUserResService, input=468, dubbo=2.6.0, version=null}]"

按照第一种写法,decode的时候出现异常

tonmy2012 commented 5 years ago

为什么不内置 js-to-java java.String(name) 明显这种写法比较优雅吧

omnip620 commented 5 years ago

java is not defined 你把 js-to-java 写到你的项目里啊

const java = require("js-to-java");
...
findByName : (name) => [ java.String(name) ],
...
tonmy2012 commented 5 years ago

解决了,谢谢