dubbox-2.8.4升级到jackson v2的过程

dubbox被dangdangdotcom接手后进行了若干升级和改进,特别是 rpc-rest 协议让跨语言集成变得简单。我对其中一个项目后端采用了 dubbox 框架的 rpc-rest 协议,dubbox引用了jackson-2.3.3,但在注解实体类的序列化和反序列化时又必须使用jackson-1.x,相当于dubbox-2.8.4 同时依赖 jackson 1.x 和 2.x,这个就有点混乱了。由于jackson 1.x 和 2.x使用了不同的package,在编写单元测试和引用时很容易混淆两个版本;而且由于其中一个module 在多个项目中使用了,不同项目之间的兼容性问题又出现了。

为了解决dubbox引用多个jackson版本的问题,尝试按照 Dubbo之——改造Dubbo,使其能够兼容Spring 4注解配置 - z69183787的专栏 升级到 spring 4.x,直接clone dubbox、修改源码并编译发布,最后使用 tcp monitor观察json文本,看到Date类型字段仍然是一个长整型时间戳,jackson-2.x的注解没有起作用!又search了其他一些技术贴,几天里都没有解决。

中间还尝试修改dubbo:protocol 在 dubbo-context.xml中,仍然 jackson-2.3.3 的注解不起作用:

<dubbo:protocol name="rest" port="8080" server="servlet" contextpath="bmserver" serialization="jackson2"></dubbo:protocol>

偶然翻到 dubbox rest协议jackson 反序列化的坑 这个技术贴,看到 resteasy 引用了jackson-1.9.12!

resteasy-jackson

于是先使用maven排除法:


        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>${resteasy.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-core-asl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-mapper-asl</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-jaxrs</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.codehaus.jackson</groupId>
                    <artifactId>jackson-xc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

以为resteasy 会由于找不到jackson 1.9.12自动使用 dubbox 引用的 jackson-2.3.3,然鹅resteasy并没有这么做!!

继续……在maven repository上search resteasy,居然发现resteasy有两个module,分别是 resteasy-jackson-provider 和 resteasy-jackson2-provider!考虑到 dubbox 引用了resteasy,但对 resteasy 如何序列化和反序列化json并没有约定,直接使用resteasy-jackson2-provider 不就可以了么!测试发现果然可以正常工作了,实体类的Date注解工作正常了,序列化成了ISODate格式。

至此,fork了dubbox项目 https://github.com/abelli85/dubbox,直接修改maven文件中为 resteasy-jackson2-provider,重新编译发布,再重新编译发布我的几个项目,终于不需要再一个个项目编写两个版本的注解了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值