修改AXIS2源码解决 @webresult注解没法修改返回值名称问题

因项目须要,最近在用axis2搭建webservice服务,使用过程当中发现axis2的axis2-kernel-1.6.2.jar包里有一个坑,准确说是一个bug(看来apache的东西也不是完美无瑕的哈),记录一下。web

还原一下发现这个坑的整个过程:apache

下面是个人webservice服务端核心实现代码,能够看到我在两个方法的返回值前面都加上了@webresult注解,而且各自赋予别名,然而发布后经过WSDL文档看到两个别名并无生效,感受很是纳闷,中间经历了无数次各类尝试改代码都无效,差点要怀疑人生了,但我没有怀疑人生,我开始怀疑是否是apache给的这个包有bug,因而开始了漫长的源码分析定位。。。eclipse

 

大约两个小时的源码追踪后,个人猜想被证实是对的,罪魁祸首就是下面这行代码:maven

代码命名很规范基本不须要注释了,先得到方法上的@webresult注解,判断注解不为空时获取该注解的name属性,也就是咱们给返回值取得别名,问题出在获取别名这个判断上,恰好判断反了(汗,很低级的错误),这样判断的结果就是设置了别名反而被它用默认值覆盖了。源码分析

修改就很简单了 ,将框内的if语句修改成 if (returnName == null || "".equals(returnName)) 便可,修改后以下:测试

改完源码启动maven从新编译,因为一开始编译老是失败,我把test 和test-resource目录下的文件所有去掉,同时也去掉pom文件中对测试代码的编译部分,进入项目根目录运行打包命令,新鲜出炉的jar包就有了。若是项目导入eclipse里面报错不用管,只须要外部的maven编译打包就行了。spa

将新的jar导入项目替换原来的maven引用,问题解决。blog

人若是没有梦想,那就做一条无忧无虑的白痴咸鱼,也挺好的。ip

相关文章
相关标签/搜索