環(huán)境:WebSphere 6.l
JRE: WebSphere 6.1 JRE
項目需求:用SUN JDK6自帶的JAX-WS創(chuàng)建Web Service。 其中Server端的Web Service接口已發(fā)布,我這邊的項目直接根據(jù)對方提供的WSDL創(chuàng)建Client。
碰到的問題:
當調用javax.xml.ws.Service的構造方法 Service(URL url, QName qName)的時候,報錯如下:
[3/14/09 14:51:53:750 CST] 0000002c SystemErr R Caused by: java.lang.Throwable: java.lang.LinkageError: You are loading old SAAJ from jar:file:/C:/Program%20Files/IBM/SDP70/runtimes/base_v61/lib/j2ee.jar!/javax/xml/soap/MessageFactory.class
at com.sun.xml.ws.api.SOAPVersion.<init>(SOAPVersion.java:184)
at com.sun.xml.ws.api.SOAPVersion.<clinit>(SOAPVersion.java:83)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:177)
at com.sun.xml.ws.api.BindingID.<clinit>(BindingID.java:318)
...(以下省略300字)
Caused by: java.lang.Throwable: java.lang.NoSuchMethodError: javax/xml/soap/MessageFactory.newInstance(Ljava/lang/String;)Ljavax/xml/soap/MessageFactory;
at com.sun.xml.ws.api.SOAPVersion.<init>(SOAPVersion.java:178)
... 21 more
也就是說,程序先去讀取了WebSphere 6.1的j2ee.jar包里的相關類,而沒去讀取我們真正要用的兩個SAAJ jar包:saaj-api.jar和saaj-impl.jar. 結果就出錯了。
IBM上找到的原因及解決辦法:
主要就是把Classloader mode從默認的Parent_First改成Parent_Last,讓程序先讀自己的class文件以及jar包。
我就照樣畫葫蘆設置了。順便說一下,關聯(lián)共享庫到應用程序,我無論如何都做不成功。關閉Application,進入Application,關聯(lián)共享庫,關聯(lián)好了,保存成功,退到外面,再進去,共享庫又沒關聯(lián)上。設置Classloader mode的時候也遇到了這樣的問題,但最終還是迫使其讓我保存了。共享庫就不管理,反正無所謂,只要加載順序變了就成。
但事實上,我的擔心成為了事實:程序啟動失敗,雖然起來了,但只跑了一小部分代碼,后面的服務都沒起來。想想也是,程序那么大,用到的jar包那么多,改了Classloader mode,一切全都亂套了...
之后,查看Console-->TroubleShooting-->Class Loader View,發(fā)現(xiàn)系統(tǒng)最開始加載的是WebSphere下的ext目錄下的jar包
、
所以就投機取巧,把我要用的兩個saaj包放到了ext目錄下,重啟,程序運行成功
當然,這不是一個好的解決辦法,阿三那里能不能通得過還是個問題
posted on 2009-03-14 20:26
EvanLiu 閱讀(6321)
評論(1) 編輯 收藏 所屬分類:
Java基礎