1. 程式人生 > >JBoss呼叫Webservice出現org.jboss.ws.core.jaxws.spi.ProviderImple not found錯誤

JBoss呼叫Webservice出現org.jboss.ws.core.jaxws.spi.ProviderImple not found錯誤

一、環境介紹
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。

個人建議選擇第一個解決辦法,簡單幹脆利落,還可以迴避其他類導致的版本不相容問題。