blog/source/_posts/dubbo_invoke_json_unclose_s...

2.0 KiB
Raw Blame History

title tags categories abbrlink date
记一次Dubbo invoke命令的问题
851d3eeb 2024-03-14 11:04:12

记一次Dubbo invoke命令的问题

背景

因为线上发生了一次死锁问题导致数据没有正常写入需要手动调用dubbo invoke重试。

接口入参为 String, String, Object

命令为:

invoke xxService.xxMethod("123","321",{...})

愉快进入容器,开始执行,不出意外,意外就发生了

Invalid json argument, cause: unclosed string : 

排查

最开始以为是JSON格式有问题开始排查格式用了各种校验工具都没有发现问题

举例格式如下:

{
    "class": "xxx",
    "xx": "xxx",
    "xxx": "xxx",
    "xxxx": "xxx",
    "xxx": "xxxx",
    "xxxRequest": {
        "xxxNo": "xxx",
        "xxxName": "xx(XXX)x"
    },
    "xxxItemDataList": [
        {
            "xxx": "xxx",
            "xxx": "xxx",
            "class": "xxx.xxx.xxx.xxx"
        }
    ]
}

因为接口的入参是一个父类所以用class执行具体子类类型

list中同样也制定了类型

用了各种工具校验JSON都没有问题最后跟代码发现是因为Json中的value有英文的括号导致命令解析出现了问题到括号就结束了解析实际到Dubbo中的JSON是

{
    "class": "xxx",
    "xx": "xxx",
    "xxx": "xxx",
    "xxxx": "xxx",
    "xxx": "xxxx",
    "xxxRequest": {
        "xxxNo": "xxx",
        "xxxName": "xx(XXX

这可不就是JSON格式有误吗

代码解析

dubbo分支切换到2.7.x

全局搜Invalid json argument,找到代码

clipboard.png

按照第一个英文括号解析的,导致整个命令被强制截断。

再看一下最新代码 3.2的版本

clipboard.png

最新版已经修复了这个问题。

总结

当dubbo版本是2.7.x使用invoke时参数中不能有英文右括号