项目中用到的cxf依赖为cxf-spring-boot-starter-jaxws 3.1.12版本,springboot版本为1.5.19。发布到was8.5之后报各种问题
Springboot集成cxf在wsa发布后会遇到一系列的ClassNotFound的问题,由于was容器中自带一些webservice的jar包,应用中cxf的某些依赖包在加载时was会优先加载自己的同名的包,所以把自己的低版本的包加载到应用里而没有加载应用自带的jar包,因此会遇到许多ClassNotFound的问题。解决办法为建立共享库,把冲突的jar包加入共享库中,同时禁用was的JAX-WS引擎。
-
建立共享库
Was8.5下冲突的jar包有三个,有validation-api-1.1.0.Final.jar、neethi-3.0.3.jar、xmlschema-core-2.2.2.jar。在was9.0下可能只有neethi-3.0.3.jar、xmlschema-core-2.2.2.jar。
将jar包放入共享库中,
- 在有权限的目录下新建目录存放冲突jar包

2、创建共享库
左侧导航栏 环境-》共享库-》新建

选择集群环境、填写类路径、选择“使用隔离的器装入”


应用-》保存

然后可以看到新建的共享库

3、禁用server的JAX-WS服务
服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name,然后在“服务器基础结构”下面单击 Java 和进程管理 > 进程定义 > Java 虚拟机 > 定制属性




新建-》输入
名称
com.ibm.websphere.webservices.DisableIBMJAXWSEngine
值
true

应用-》保存

4、重启服务
-
在war包中需要配置DisableIBMJAXWSEngine: true,以及在jar包中删除相应的jar包
- 修改MAINFEST.MF文件

添加DisableIBMJAXWSEngine: true

- 在WEB-INF\lib下删除刚刚添加在共享库中的那三个(或两个)jar包

- 将修改后的war上传安装,安装应用时会多出一步为webservice模块选择数据源,手动添加之前创建好的数据源。然后跳过警告继续。
三、为应用添加共享库以及设定类加载顺序

选择对应的应用,点击进行设置
(1)、共享库引用


选择应用的application.xml,点击引用共享库

选择要引用的共享库引用

确定-》保存

再确定保存
(2)、设置类加载顺序


选择覆盖……,父类最后
应用-》保存
5.启动测试
启动后测试webservice
http://192.168.26.15:9080/test/webservice/cxfTestService?wsdl
正常显示了
6020

被折叠的 条评论
为什么被折叠?



