1. 程式人生 > >websphere上部署基於cxf框架的webservice專案報錯問題的解決方案

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相關的類庫。