標籤:
用wsimport產生webservice的用戶端以後,調用用戶端產生方法時總是出現 runtime modeler error: Wrapper class stardand.nrcms.ncking.com.Login is not found. Have you run APT to generate them?這個錯誤;
這個公司的介面我原來是做過的,現在不同的是,換了個地址,和原來的環境是一樣的,jdk1.6.20,然後加入了myeclipse裡邊的jax-ws 2.1 Runtime libraries 和jax-ws 2.1 api libraries,由於wsimport 產生用戶端時,指定包名以後,總是報A class/interface with the same name "XXX**" is already in use的錯誤,導致不能夠產生用戶端代碼,於是就沒有指定包名,產生代碼以後,再在myeclipse裡邊,重新命名為我自己想要的包名。一樣的步驟,為什麼這個就會報錯?
百度了一下,這個錯誤,發現有幾種答案。
1.jdk版本要升到jdk1.6.22以上,這個我用了jdk1.6.23,還用了jdk1.6.43,都還是存在這個問題。
2.需要jaxws-api-2.1.jar及jaxb-api-2.1.jar,這個我試過把myeclipse裡邊的jax-ws 2.1 Runtime libraries和jax-ws 2.1 api libraries都去掉,然後把jaxws-ri-2.2.8裡邊所有的jar拷到工程下邊的lib中去,調用的時候確出現找不到這個一個類的錯誤。後來想jdk1.6裡邊已經包含了jax-ws 2.1,所以應該不是這個問題。
3.表示.apt_generated源碼包下沒有自動產生jax-ws相應的類,我想這個應該是針對服務端的
全都試過,沒了辦法,今天又找了同事原來產生過的,能用的用戶端的代碼來調用,同樣也出現這個問題。
前邊的方法都不對,於是退到原點,把jdk的版本還是用回原來jdk1.6.20,myeclipse裡邊同樣加上jax-ws 2.1 Runtime libraries和jax-ws 2.1 api libraries
既然說是找不到這個類,是不是命名空間的問題,就是說,我開始我重新命名用戶端的包名的時候,有引用沒改過來,而導致找不到這個類?是不是有注釋引用重新命名的時候,不會同時改過來,於是回到為什麼產生用戶端的時候,會出現A class/interface with the same name "XXX**" is already in use的錯誤,百度以後,在http://chenlin10058.iteye.com/blog/1558591裡邊找到了答案
目前可選擇的方案:
1.使用-autoNameResolution自動處理
wsdl2java -autoNameResolution http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl
2.wsimport -p com.test.client -keep http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl-B-XautoNameResolution
我用了第二種方法
wsimport -s D:\\temp -p com.**.** http://***.***.*** -B-XautoNameResolution
產生用戶端以後,發現用戶端所有的代碼都產生在了一個包下邊,而不像預設包名,代碼分成了兩個包,再把原來引用的相關用戶端的包名改成目前的報名
再調用該方法的時候,發現已經沒問題了
為什麼會這樣呢?不管類是不是在一個包裡邊,但是webserivce的命名空間應該是一樣的,對這個沒影響吧,沒有理論基礎,只能不斷的嘗試,摸著石頭過河,這樣的旅程真可怕。
調用webservice用戶端方法 runtime modeler error: Wrapper class ××× is not found. Have you run APT to generate them?