解决cxf的jar包冲突
2012-11-19 14:13
218 查看
本次做web service开发,遇到了一些问题,最终解决了,在此把过程总结一下
服务器上的jar包是cxf2.0.13,jdk版本是jdk6。不过由于cxf2.0.13能够找到的资料不多了,所以就想用cxf2.5.2来开发。
这个工作很顺利就完成了,然后将代码提交到服务器上,并用cxf2.5.2.jar替换了cxf2.0.13.jar,结果报了以下异常
java.lang.IncompatibleClassChangeError: Implementing class
感觉是jar包冲突,这下悲剧了,服务器上有100多个jar包,只好逐一排查,最后发现是由于cxf依赖的包版本不一致造成的
cxf2.0.13依赖的是neethi-2.0.4以及XmlSchema-1.4.5,而cxf2.5.2依赖的是neethi-3.0.1以及xmlschema-core-2.0.1
用neethi-3.0.1和xmlschema-core-2.0.1替换之后,服务发布成功啦!
本以为搞定了,结果跑了一下冒烟测试,又悲剧了,系统里原来的一个基本功能挂了,跟进去一看,是系统原来的代码跟cxf2.5不兼容
这下就有2个方案,一个是修改已有的代码,使之兼容cxf2.5;或者基于cxf2.0,重新写我们的web service
第一个方案风险太大,因为老代码涉及很广,而且我们都不太熟悉,所以就决定用低版本的cxf包重写我们的web service
但是cxf2.0的资料实在是很少,官网都不提供了,所以我们稍微升了一点,用cxf2.1
替换试了一下,发现cxf2.1和cxf2.0一样,也是依赖neethi-2.0.4以及XmlSchema-1.4.5,只是额外依赖一些别的jar包,这样就直接用cxf2.1替换了cxf2.0.13
然后验了一下刚才失败的基本特性,发现可以,看来老代码和cxf2.1是兼容的,这样就没有后顾之忧了
这个时候,我们的web service倒是能发布,但是调用失败
调用的时候报以下异常:
java.lang.IllegalArgumentException: object is not an instance of declaring class
不管怎么试,都是这个结果
一筹莫展了很长时间,因为这个时候不知道咋改了,代码没有动过,用cxf2.5.2就OK,用cxf2.1就是不行
最后才发现,原来是cxf2.5.2和cxf2.1的配置文件写法不一样
cxf2.5.2的写法:
Xml代码
<jaxws:endpoint id="remedy"
implementorClass="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
address="/RemedyWebService" />
cxf2.1的写法:
Xml代码
<jaxws:endpoint id="remedy"
implementor="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
address="/RemedyWebService" />
区别非常小,就是implementorClass和implementor的区别。。所以很难发现
最后获得了圆满的结果,使用cxf2.1,neethi-2.0.4,XmlSchema-1.4.5,兼容了老代码,新开发的web service也发布调用成功了
总结:
1、cxf早期版本依赖的jar包很多,要用cxf就要引一大堆jar包,新版本基本没这个问题了
2、各版本cxf核心jar包的组合:
cxf-2.0.13.jar
neethi-2.0.4.jar
XmlSchema-1.4.5.jar
cxf-2.5.2.jar
neethi-3.0.1.jar
xmlschema-core-2.0.1.jar
3、不同版本cxf的配置文件的写法有细微的差别
服务器上的jar包是cxf2.0.13,jdk版本是jdk6。不过由于cxf2.0.13能够找到的资料不多了,所以就想用cxf2.5.2来开发。
这个工作很顺利就完成了,然后将代码提交到服务器上,并用cxf2.5.2.jar替换了cxf2.0.13.jar,结果报了以下异常
java.lang.IncompatibleClassChangeError: Implementing class
感觉是jar包冲突,这下悲剧了,服务器上有100多个jar包,只好逐一排查,最后发现是由于cxf依赖的包版本不一致造成的
cxf2.0.13依赖的是neethi-2.0.4以及XmlSchema-1.4.5,而cxf2.5.2依赖的是neethi-3.0.1以及xmlschema-core-2.0.1
用neethi-3.0.1和xmlschema-core-2.0.1替换之后,服务发布成功啦!
本以为搞定了,结果跑了一下冒烟测试,又悲剧了,系统里原来的一个基本功能挂了,跟进去一看,是系统原来的代码跟cxf2.5不兼容
这下就有2个方案,一个是修改已有的代码,使之兼容cxf2.5;或者基于cxf2.0,重新写我们的web service
第一个方案风险太大,因为老代码涉及很广,而且我们都不太熟悉,所以就决定用低版本的cxf包重写我们的web service
但是cxf2.0的资料实在是很少,官网都不提供了,所以我们稍微升了一点,用cxf2.1
替换试了一下,发现cxf2.1和cxf2.0一样,也是依赖neethi-2.0.4以及XmlSchema-1.4.5,只是额外依赖一些别的jar包,这样就直接用cxf2.1替换了cxf2.0.13
然后验了一下刚才失败的基本特性,发现可以,看来老代码和cxf2.1是兼容的,这样就没有后顾之忧了
这个时候,我们的web service倒是能发布,但是调用失败
调用的时候报以下异常:
java.lang.IllegalArgumentException: object is not an instance of declaring class
不管怎么试,都是这个结果
一筹莫展了很长时间,因为这个时候不知道咋改了,代码没有动过,用cxf2.5.2就OK,用cxf2.1就是不行
最后才发现,原来是cxf2.5.2和cxf2.1的配置文件写法不一样
cxf2.5.2的写法:
Xml代码
<jaxws:endpoint id="remedy"
implementorClass="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
address="/RemedyWebService" />
cxf2.1的写法:
Xml代码
<jaxws:endpoint id="remedy"
implementor="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"
address="/RemedyWebService" />
区别非常小,就是implementorClass和implementor的区别。。所以很难发现
最后获得了圆满的结果,使用cxf2.1,neethi-2.0.4,XmlSchema-1.4.5,兼容了老代码,新开发的web service也发布调用成功了
总结:
1、cxf早期版本依赖的jar包很多,要用cxf就要引一大堆jar包,新版本基本没这个问题了
2、各版本cxf核心jar包的组合:
cxf-2.0.13.jar
neethi-2.0.4.jar
XmlSchema-1.4.5.jar
cxf-2.5.2.jar
neethi-3.0.1.jar
xmlschema-core-2.0.1.jar
3、不同版本cxf的配置文件的写法有细微的差别
相关文章推荐
- spring mvc + CXF 2.6.14 在weblogic 中部署解决jar包冲突
- 解决cxf的jar包冲突
- cxf spring restful 问题解决(jar包冲突)
- axis2和cxf冲突解决,主要是XmlSchema排除掉,以下是axis2引用的jar包
- 折中解决已有项目与CXF ws功能整合时的jar包冲突
- 工程中导入hibernates和Struts2时jar包冲突问题解决
- jar包的冲突问题如何解决
- Hibernate的Antlr在Weblogic中产生Jar冲突的历史缘故以及解决办法
- webshere下jar包冲突解决办法
- NoSuchMethodException:解决项目jar包与webSphere自带jar包的冲突
- gradlew解决jar或class冲突
- spring maven项目解决依赖jar包版本冲突方案
- 通过maven-shade-plugin 解决Elasticsearch与spark的jar包冲突问题
- maven解决jar包版本冲突
- eclipse:xml-apis jar包冲突导致的getTextContent()方法无法找到解决
- 通过maven-shade-plugin 解决Elasticsearch与hbase的jar包冲突问题
- 利用JAVA中的endorsed技术解决jar包版本冲突的问题
- 【CXF】wsdl2java 生成客户端: 具有相同名称 "xxx" 的类/接口已在使用。请使用类定制设置来解决此冲突。
- Maven的传递性依赖及其jar包冲突解决
- sbt发布assembly解决jar包冲突问题 deduplicate: different file contents found in the following