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服务的选项,可能在一定程度上可以解决冲突。

WAS7和WAS8.5布署Axis2 webservice_第1张图片

 

方案6:最重要的一点

 共享库解决方案。

冲突的jar包为axis2-adb-1.6.2.jar,把它放进共享库后,应用中的axis2-adb-1.6.2.jar也没必要删除,可删可不删。

建共享库时有很多细节需要注意,包不要放多了,也不能放少了,建完共享库后还要重启server生效,不止是应用,服务也是得重启的,节点倒是不用操作,这点非常重要!

下面开始建共享库以及引用共享库。

打开菜单环境 - 共享库 , 选好server作用域,如果是集群的话选集群配置,然后点新建菜单

WAS7和WAS8.5布署Axis2 webservice_第2张图片

 

 接下来建立你的共享库,冲突的jar只有一个,axis2-adb-1.6.2.jar,注意选类加载隔离

WAS7和WAS8.5布署Axis2 webservice_第3张图片

然后很重要的一点要重启Server 

菜单在服务器-服务器类型-

  • WebSphere Application Server

 选中你应用部署的Server重启,让共享库生效。

然后进应用绑定共享库

WAS7和WAS8.5布署Axis2 webservice_第4张图片

WAS7和WAS8.5布署Axis2 webservice_第5张图片

 

WAS7和WAS8.5布署Axis2 webservice_第6张图片

绑定完后,后退就可以看到引用到共享库了。至此结束。

这时候启动应用,就正常了。

WAS运行时的类加载顺序,可以去下面这个菜单看看

企业应用程序 >你的应用_war > 管理模块 > 你的应用.war > 查看类装入器(选择服务器) > 类装入器查看器 

可以导出文件看下

WAS7和WAS8.5布署Axis2 webservice_第7张图片

 至此所有问题解决。

现在就只剩一个问题,是如何知道导致冲突的是axis2-adb-1.6.2.jar

 

你可能感兴趣的:(webphere,JVM,was部署axis2,was,webservice,was,jar包冲突,Axis2)