项目中用到的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包放入共享库中
1、在有权限的目录下新建目录存放冲突jar包
2、创建共享库
左侧导航栏 环境->共享库->新建
选择集群环境、填写类路径、选择“使用隔离的器装入”
应用->保存
然后可以看到新建的共享库
禁用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
正常显示了
————————————————
版权声明:本文为CSDN博主「weiwei1261559539」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weiwei1261559539/article/details/89422051