websphere上部署基於cxf框架的webservice項目報錯問題的解決方案

注:這篇文章來自公司內部wiki,之前在碰到這種問題的時候,首先也是去網上搜資料,但發現沒有完整可行的解決方案。這篇文章上列出的解決方案,目前仍在完善中,但已經解決了幾個項目的上線問題,因此將這篇文章分享出來,希望對被同樣問題所困擾的項目組能夠有所幫助。

問題簡介

在日常的開發過程中,我們會經常使用到一些第三方(當然這裏所指的第三方是指非產品或者產品附屬組件,如cxf、Axis2等)的webservice引擎,常見的場景往往是在本地測試過程中(web容器多爲tomcat、jetty、jboss等較爲輕量級的免費服務器)是沒有任何問題的,但是一旦部署到websphere或者weblogic中,就會出現一系列匪夷所思的問題。我們就基於websphere部署環境,講解下問題的解決方法。

基本原因

1、websphere應用服務器中內嵌了其自由的一套JAX-WS引擎,專職提供webservice相關服務。

2、websphere應用服務器JAX-WS引擎引用了一些第三方的包,並且在您的應用也無可避免的引用了這些包,並且部署到websphere容器上時,這些第三方包其實已經加載到websphere的應用服務器中,再次加載會導致衝突。

解決步驟(以CXF爲例)

由問題產生的基本原因所述的兩點,基本確定了問題的處理方法無非兩點:

A、清理應用中的衝突包。

B、禁用websphere自帶的JAX-WS引擎。

清理應用中的衝突包(仍在完善中)

與webpshere衝突的JAX-WS相關的第三方jar包清單如下:

  • saaj-api.jar
  • saaj-impl.jar
  • xalan.jar
  • xercesImpl.jar
  • apache-xerces-xercesImpl.jar
  • xml-apis.jar
  • xmlbeans.jar
  • jaxb-api.jar
  • jaxb-impl.jar
  • jaxrpc.jar
  • stax-api.jar
  • geronimo-stax-api.jar
  • activation.jar

在打包完成後,可將這些包從部署包中清除

禁用websphere自帶的JAX-WS引擎

禁用websphere自帶的JAX-WS引擎有兩個步驟,具體如下:

1、禁用server的JAX-WS引擎
 
設置JVM的參數爲:
-Dcom.ibm.websphere.webservices.DisableIBMJAXWSEngine=true


 2、調整應用的類加載順序

調整類加載順序爲“父靠後”加載策略,可以保證優先加載CXF相關的webservice,以便能夠替換websphere中與JAX-WS相關的類庫。

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