本次做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的配置文件的写法有细微的差别
分享到:
相关推荐
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件
因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire.wsdl11.parser....
假设你已经下载了一个名为`webservice`的压缩包,里面可能包含了Axis2和CXF的相关jar包,以及示例代码或者配置文件。要创建一个基本的Web服务,你需要按照以下步骤操作: 1. **创建服务接口**:定义一个Java接口,...
这个问题在标题“cxf和xfire的jar包冲突解决”中得到了明确指出。 Apache CXF是一个全面的服务开发框架,它支持SOAP、RESTful Web服务,以及多种协议和绑定。而XFire是CXF的前身,也是一个强大的Web服务框架,但它...
因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....
因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....
在实际开发中,根据项目需求,可以选择性地引入这些jar包,或者通过Maven或Gradle等构建工具来管理依赖,以减小项目的体积并避免类冲突问题。 总的来说,Apache CXF 3.1.6是一个强大且灵活的Web服务框架,提供了...
cxf-3.2.1.jar 核心包,解决webservice开发的jar的冲突问题。
CXF 2.1 JAR 包是一款用于...总之,使用CXF 2.1 JAR包时,需要充分理解其核心概念,关注兼容性,合理配置安全性和性能,并利用好社区资源来解决问题。在升级或选择其他版本时,也要综合考虑项目的需求和现有的技术栈。
WebService的CXF框架是一个广泛使用的开源项目,用于构建和消费Web服务。...如果只导入部分jar包,可能会出现类找不到或冲突的问题。因此,"尽量全部导入"的建议是非常重要的,以保证CXF框架能够正确地工作。
- 确保所有jar包版本兼容:Spring和CXF的版本可能需要匹配才能避免冲突。 - 避免类加载问题:如果在同一应用中同时使用Tomcat和其他服务器,可能需要调整类加载顺序,避免类冲突。 - 测试和调试:在整合过程中,...
"spring整合cxf全jar包 一个都不能少和一个都不能多"这个主题表明了在配置Spring和CXF时,正确选择和包含所有必要的JAR文件至关重要,因为缺少任何一个都可能导致项目运行失败或者功能缺失。 首先,让我们深入理解...
因与cxf包xmlschema-core-*.jar 冲突 故重新打包 XmlSchema-1.1.jar 源码修改原类径的方法来重新打包避免冲突 源码放在javas.rar文件夹中 org.codehaus.xfire.wsdl11.parser.SchemaInfo org.codehaus.xfire....
开发者需要根据项目需求选择相应的jar包进行引用,以避免版本冲突或缺失必要的功能。 在实际开发中,为了简化依赖管理,许多开发者会选择使用Maven或Gradle等构建工具,通过指定CXF的依赖项,让这些工具自动下载并...
在开发环境中,正确导入和管理这些jar包对于避免版本冲突、确保功能正常运行至关重要。 综上所述,"spring3+cxf2.7 整合jar包"的压缩文件可能是开发者快速搭建SpringMVC+CXF环境的重要资源。它简化了依赖管理,使得...
在实际项目中,开发者会根据具体的需求选择需要的jar包,而不是简单地全部引入,以避免不必要的依赖和潜在的冲突。使用maven或gradle这样的构建工具可以更方便地管理这些依赖,确保项目只包含必要的库,并自动解决...