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相关的类库。

你可能感兴趣的:(Webservice)