`

解决cxf的jar包冲突(转)

    博客分类:
  • CXF
 
阅读更多

本次做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的写法: 

 

<jaxws:endpoint id="remedy"  
        implementorClass="com.huawei.remedy.webservice.impl.RemedyWebServiceCMImpl"  
        address="/RemedyWebService" />  

  cxf2.1的写法: 

 

<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的配置文件的写法有细微的差别

 

分享到:
评论

相关推荐

    webservice axis2 cxf jar包及简单实例

    webservice axis2 cxf jar包及简单实例

    websphere下部署CXF项目jar包冲突问题解决方式

    在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件

    xfire和cxf jar包冲突

     因与cxf包xmlschema-core-*.jar 冲突  故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突  org.codehaus.xfire.wsdl11.parser.SchemaInfo  org.codehaus.xfire.wsdl11.parser....

    xfire与cxf包冲突解决方法

    因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....

    xfire与cxf包冲突解决方案

    因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....

    cxf和xfire的jar包冲突解决

    我是拆开XmlSchema的jar包重新打包,然后修改xfire-core-*的引用的地址。 xfire-core-*里面需要修改引用地址的地方其实也就下面几个类,改完重新编译即可。

    xfire与cxf包解决jar包444-.zip

    因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....

    xfire与cxf解决冲突

    因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....

    webService的CXF框架jar包

    这里是WebService的CXF的jar包资源。在导入时尽量全部导入。避免不必要的冲突

    cxfWebservice客户端全部jar包及极简调用方法.rar

    cxf-core-3.0.0.jar,cxf-rt-bindings-soap-3.0.0.jar,cxf-rt-databinding-jaxb-3.0.0.jar,cxf-rt-frontend-jaxws-3.0.0.jar,cxf-rt-frontend-simple-3.0.0.jar,cxf-rt-transports-http-3.0.0.jar,cxf-rt-...

    cxf2.1jar包

    注意jar的兼容性,有可能会出现jar包冲突,慎重!慎重!慎重!!!

    cxf整合springjar包下载

    cxf整合spring的webservices jar包下载,里面的jar包最好一起复制黏贴,这个也可能会有版本冲突问题

    cxf-3.2.1.jar

    cxf-3.2.1.jar 核心包,解决webservice开发的jar的冲突问题。

    apache-cxf-2.4.0

    apache-cxf-2.4.0,也许有人需要老的版本,就这个先留下吧。jar包冲突这种事情真是烦心的存在啊

    spring3+hibernate3整合CXF所需的jar包

    spring3.0.6+hibernate3+CXF实现的Web Service功能所需的lib包

    重新编译打包的XmlSchema.1.1.1.jar和xfire-all1.2.6.jar

    为了解决spring整合cxf,xfire遇到的jar包冲突问题,将XmlSchema.1.1.1.jar和xfire-all1.2.6.jar修改后进行了重新编译打包

Global site tag (gtag.js) - Google Analytics