当前位置 : 主页 > 网页制作 > Nodejs >

JBoss调用Webservice出现org.jboss.ws.core.jaxws.spi.ProviderImple not found错误

来源:互联网 收集:自由互联 发布时间:2021-06-24
一、环境介绍 Linux CentOS 6.5 64bit,JDK1.7 ,JBoss 4.3.0-GA,项目工程引用cxf框架,版本号为2.5.0 二、报错信息 项目中自身发布的Webservice没有问题,外部可以正常调用,但项目作为客户端调用

一、环境介绍
Linux CentOS 6.5 64bit,JDK1.7 ,JBoss 4.3.0-GA,项目工程引用cxf框架,版本号为2.5.0

二、报错信息
项目中自身发布的Webservice没有问题,外部可以正常调用,但项目作为客户端调用其他系统发布的Webservice接口时,任何接口都报如下错误:

java.util.ServiceConfigurationError:javax.xml.ws.spi.Provider:Provider org.jboss.ws.core.jaxws.spi.ProviderImpl not found
    at java.util.ServiceLoader.fail(ServiceLoader.java:231)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:365)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java:165)
    at javax.xml.ws.spi.Provider.provider(Provider.java:125)
    at javax.xml.ws.Service.<init>(Service.java:77)

三、原因定位
初步怀疑是Jboss中webservice版本与项目工程中cxf版本有冲突。

四、解决办法
发现在Jboss/Jboss-as/server/xxx/lib下面有一个jar包:jboss-jaxws.jar,删除掉后,webservice恢复正常。

五、原因分析
1)cxf框架中有一个jar包:cxf-rt-frontend-javxws-2.5.0.jar,META-INF/services/javax.xml.ws.spi.Provider文件,里面的内容是org.apache.cxf.jaxws22.spi.ProviderImpl
2)同时在jboss-jaxws.jar文件中相同目录下META-INF/services/也有一个javax.xml.ws.spi.Provider文件,里面的内容却是org.jboss.ws.core.jaxws.spi.ProviderImpl。报错的内容与此类相关。
Jboss里面没找到这个类,所以报错了。

补充:org.jboss.ws.core.jaxws.spi.ProviderImpl这个类原本是在jbossws-core.jar包里的,这个jar包由于之前与cxf框架有冲突已经删除掉了,所以导致这个报错。

六、解决办法
1)直接删除jboss-jaxws.jar文件
2)将jboss-jaxws.jar中javax.xml.ws.spi.Provider文件的内容改为org.apache.cxf.jaxws22.spi.ProviderImpl。

个人建议选择第一个解决办法,简单干脆利落,还可以回避其他类导致的版本不兼容问题。

网友评论