環(huán)境:WebSphere 6.l
JRE: WebSphere 6.1 JRE
項(xiàng)目需求:用SUN JDK6自帶的JAX-WS創(chuàng)建Web Service。 其中Server端的Web Service接口已發(fā)布,我這邊的項(xiàng)目直接根據(jù)對(duì)方提供的WSDL創(chuàng)建Client。
碰到的問題:
當(dāng)調(diào)用javax.xml.ws.Service的構(gòu)造方法 Service(URL url, QName qName)的時(shí)候,報(bào)錯(cuò)如下:
[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包里的相關(guān)類,而沒去讀取我們真正要用的兩個(gè)SAAJ jar包:saaj-api.jar和saaj-impl.jar. 結(jié)果就出錯(cuò)了。
IBM上找到的原因及解決辦法:
主要就是把Classloader mode從默認(rèn)的Parent_First改成Parent_Last,讓程序先讀自己的class文件以及jar包。
我就照樣畫葫蘆設(shè)置了。順便說一下,關(guān)聯(lián)共享庫(kù)到應(yīng)用程序,我無論如何都做不成功。關(guān)閉Application,進(jìn)入Application,關(guān)聯(lián)共享庫(kù),關(guān)聯(lián)好了,保存成功,退到外面,再進(jìn)去,共享庫(kù)又沒關(guān)聯(lián)上。設(shè)置Classloader mode的時(shí)候也遇到了這樣的問題,但最終還是迫使其讓我保存了。共享庫(kù)就不管理,反正無所謂,只要加載順序變了就成。
但事實(shí)上,我的擔(dān)心成為了事實(shí):程序啟動(dòng)失敗,雖然起來了,但只跑了一小部分代碼,后面的服務(wù)都沒起來。想想也是,程序那么大,用到的jar包那么多,改了Classloader mode,一切全都亂套了...
之后,查看Console-->TroubleShooting-->Class Loader View,發(fā)現(xiàn)系統(tǒng)最開始加載的是WebSphere下的ext目錄下的jar包
、
所以就投機(jī)取巧,把我要用的兩個(gè)saaj包放到了ext目錄下,重啟,程序運(yùn)行成功
當(dāng)然,這不是一個(gè)好的解決辦法,阿三那里能不能通得過還是個(gè)問題
posted on 2009-03-14 20:26
EvanLiu 閱讀(6322)
評(píng)論(1) 編輯 收藏 所屬分類:
Java基礎(chǔ)