因项目需要,最近在用axis2搭建webservice服务,使用过程中发现axis2的axis2-kernel-1.6.2.jar包里有一个坑,准确说是一个bug(看来apache的东西也不是完美无瑕的哈),记录一下。
还原一下发现这个坑的整个过程:
下面是我的webservice服务端核心实现代码,可以看到我在两个方法的返回值前面都加上了@webresult注解,并且各自赋予别名,然而发布后通过WSDL文档看到两个别名并没有生效,感觉非常纳闷,中间经历了无数次各种尝试改代码都无效,我开始怀疑是不是apache给的这个包有bug,于是开始了漫长的源码分析定位。。。
大约两个小时的源码追踪后,我的猜测被证明是对的,罪魁祸首就是下面这行代码:
代码命名很规范基本不需要注释了,先获得方法上的@webresult注解,判断注解不为空时获取该注解的name属性,也就是我们给返回值取得别名,问题出在获取别名这个判断上,刚好判断反了(汗,很低级的错误),这样判断的结果就是设置了别名反而被它用默认值覆盖了。
将上面的if语句修改为 if (returnName == null || "".equals(returnName)) 即可,修改后如下:
改完源码启动maven重新编译,由于一开始编译总是失败,我把test 和test-resource目录下的文件全部去掉,同时也去掉pom文件中对测试代码的编译部分,进入项目根目录运行打包命令,新鲜出炉的jar包就有了。如果项目导入eclipse里面报错不用管,只需要外部的maven编译打包就好了。
将新的jar导入项目替换原来的maven引用,问题解决。