项目中用到了axis2,需要和第三方webservice通信,花了三四天时间,遇到很多坑,稍微记录一下
- jar包冲突问题
因为利用了AXIS2技术,所以项目中引入了相关的jar包,但是WAS作为一个web容器,容器中已经配置了AXIS2的相关的jar包,又由于was本身特殊的类加载机制,所以出现了jar包冲突问题。这里采用的是将AXIS2相关jar包变成共享库,强制was先加载我们war包中的axis2相关的jar包
解决方法:
1)改变was的类加载测录,从父加载器优先 变成 子加载器优先,但是不知道公司框架有什么设置,当设置之后,直接项目启动报错 o(╥﹏╥)o
2)建立共享库 解决jar包冲突
这里的axis2相关的jar包为
D:\linklib\axiom-api-1.2.21.jar
D:\linklib\axiom-dom-1.2.21.jar
D:\linklib\axiom-impl-1.2.21.jar
D:\linklib\axis2-adb-1.7.9.jar
D:\linklib\axis2-codegen-1.7.9.jar
D:\linklib\axis2-kernel-1.7.9.jar
D:\linklib\axis2-transport-http-1.7.9.jar
D:\linklib\axis2-transport-local-1.7.9.jar
D:\linklib\commons-httpclient-3.1.jar
D:\linklib\neethi-3.0.3.jar
D:\linklib\woden-core-1.0M10.jar
D:\linklib\xmlschema-core-2.2.1.jar
D:\linklib\httpcore-4.4.6.jar
D:\linklib\commons-codec-1.6.jar
建立共享库
项目引用共享库
-
修改java.security的配置
因为was 自带了jdk,而自己的开发环境用的是sun的jdk,两者的安全实现策略略有不同,这个问题我在网上找了好久,始终无法修改,才自己尝试修改的,感觉略有成就感。
否则可能会报com.ibm.websphere.ssl.protocol.SSLSocketFactory.createSocket nullexception
打开文件,修改160/161行,将原来的#注释去掉,修改后如下图所示
-
最后修改hosts文件
这个是另一个花了我很长时间的问题,日志老是报Connection refused: connect,后来我想了一下可能ssl证书是和域名绑定的,而如果要通信,就需要我们手动绑定ip地址和域名的映射关系