WAS7和WAS8.5佈署Axis2 webservice

無論是was7還是was8,在安裝帶有Axis2的應用時,都很容易出現jar衝突的情況,最常見的有以下:

E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet 錯誤]-[AxisServlet]: org.apache.axis2.deployment.DeploymentException: org.apache.commons.fileupload.FileUploadException

或者

  E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[AxisServlet]: java.lang.ClassCastException: com.ibm.xml.xlxp2.api.wssec.WSSXMLInputFactory incompatible with javax.xml.stream.XMLInputFactory
was7比was8好解決一點,之前佈署was7時大概查了兩週資料才解決,後來遷到was8時,照was7的方法操作還是不行的,再查了一週資料才搞定,基本上,你看到這篇文章時,你在網上查的大部分文章、官網、資料我都有看過。

was版本 7  Axis2版本1.6.2

下面先從was7的解決方式開始說起

1:把modules下的六個文件

addressing-1.6.2.mar

mex-1.6.2.mar

mtompolicy-1.6.2.mar

ping-1.6.2.mar

scripting-1.6.2.mar

soapmonitor-1.6.2.mar

重命名後綴,把.mar改爲.jar後放入應用lib目錄下

addressing-1.6.2.jar

mex-1.6.2.jar

mtompolicy-1.6.2.jar

ping-1.6.2.jar

scripting-1.6.2.jar

soapmonitor-1.6.2.jar

 2:檢查應用中是否有關於javaee的包,如 

javaee*.jar
servlet-api-*.jar

 有的話,刪掉,打包時不要包含這些jar包,was容器中自帶這些jar包了。

3:檢查應用中是否有關於xmlbeans-*.jar的包,因爲Axis2帶有axis2-xmlbeans-1.6.2.jar了,所以有別的這樣的包,也不用了。

4:最重要的一步

     修改Classloader策略,企業應用程序 > 你的應用_war > 管理模塊 > 你的應用.war

    修改類裝入器順序 爲: 類已裝入並且是先使用本地類半入器(父類在後) ---相信英文版本也一眼就能看到 - -

 

行了,was7的現在啓動就沒問題了。

was7解決方案在IBM官方論壇有

http://www-01.ibm.com/support/docview.wss?mhq=axis2&mhsrc=ibmsearch_s&uid=swg21315686

 

現在進入更爲麻煩的was8佈署,環境爲was8.5, Axis2仍爲1.6.2

先得做完以上was7的操作。

在這裏先列舉一下我所看到的相關資料的解決方法

方案1 (最終結論非必須):

DisableIBMJAXWSEngine: true in the META-INF/MANIFEST.MF 

方案2(與1應該是相同作用,最終結論非必須):
應用服務器--》yourserver-->java和進程管理 下的 進程定義--->其他屬性下的 java虛擬機-->其他屬性下的定製屬性,
如果沒有該屬性,則新建之。
com.ibmcom.ibm.websphere.webservices.DisableIBMJAXWSEngine 爲 true 

方案3(我的應用沒有,這個不知道):
刪除了項目中的,如果有的話 webserviceclient.jar 和 aopalliance-1.0.jar

方案4(最終結論非必須):

將應用axis2.xml中的EnableChildFirstClassLoading 參數設爲true 

方案5 (好像也不是必須)

在安裝war包的第一步操作裏,把部署Web Service這個選項勾上。個人猜測這是was自己用來禁用自帶webservice服務的選項,可能在一定程度上可以解決衝突。

部署Web Service

 

方案6:最重要的一點

 共享庫解決方案。

衝突的jar包爲axis2-adb-1.6.2.jar,把它放進共享庫後,應用中的axis2-adb-1.6.2.jar也沒必要刪除,可刪可不刪。

建共享庫時有很多細節需要注意,包不要放多了,也不能放少了,建完共享庫後還要重啓server生效,不止是應用,服務也是得重啓的,節點倒是不用操作,這點非常重要!

下面開始建共享庫以及引用共享庫。

打開菜單環境 - 共享庫 , 選好server作用域,如果是集羣的話選集羣配置,然後點新建菜單

環境-共享庫

 

 接下來建立你的共享庫,衝突的jar只有一個,axis2-adb-1.6.2.jar,注意選類加載隔離

建立共享庫

然後很重要的一點要重啓Server 

菜單在服務器-服務器類型-

 選中你應用部署的Server重啓,讓共享庫生效。

然後進應用綁定共享庫

 

綁定完後,後退就可以看到引用到共享庫了。至此結束。

這時候啓動應用,就正常了。

WAS運行時的類加載順序,可以去下面這個菜單看看

企業應用程序 >你的應用_war > 管理模塊 > 你的應用.war > 查看類裝入器(選擇服務器) > 類裝入器查看器 

可以導出文件看下

 至此所有問題解決。

現在就只剩一個問題,是如何知道導致衝突的是axis2-adb-1.6.2.jar

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章