因項目須要,最近在用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