wsimport将wsdl生成java 调用时碰到的一个问题Could not initialize Service
在一個采用了XFire作為WebService框架Web項目中,添加由JDK1.6 wsimport命令生成的一個WebService客戶端調用,在客戶端調用時出現了如下問題
log4j:WARN No appenders could be found for logger (org.codehaus.xfire.jaxws.Provider). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" java.lang.IllegalStateException: Could not initialize Service.at org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:77)at org.codehaus.xfire.jaxws.Provider.createServiceDelegate(Provider.java:32)at javax.xml.ws.Service.<init>(Service.java:56)at com.xxx.xxx..XXXService.<init>(XXXService.java:48)at com.xxx.xxx..main(Test.java:8) Caused by: java.lang.NoSuchMethodException: com.xxx.xxx.getPortClassMap()at java.lang.Class.getMethod(Class.java:1607)at org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:60)... 4 more根據錯誤信息來看,是由于getPortClassMap()方法未找到,導致Could not initialize Service;但是我的客戶端是用jdk自帶的wsimport生成的,為什么在方法執行過程中會調用XFire相關的代碼呢?
protected Service(java.net.URL wsdlDocumentLocation, QName serviceName) {delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,serviceName,this.getClass());}在這個地方調用Provider的方法,而Provider在jdk6中是一個抽象類,jdk6有該類的子類com.sun.xml.internal.ws.spi.ProviderImpl,
XFire也有一個該類的子類org.codehaus.xfire.jaxws.Provider,并且在xfire-all-1.2.6.jar包中/META-INF/services/javax.xml.ws.spi.Provider的文件里,
指定了由org.codehaus.xfire.jaxws.Provider去執行。
那么現在該問題解決方式就是把javax.xml.ws.spi.Provider文件中的
org.codehaus.xfire.jaxws.Provider 改為 com.sun.xml.internal.ws.spi.ProviderImpl就可以了。
這樣java6的wsimport生成的客戶端就不會再條用XFire相關的代碼了。
參考鏈接:
https://bbs.csdn.net/topics/390736806
使用wsimport將wsdl生成java
總結
以上是生活随笔為你收集整理的wsimport将wsdl生成java 调用时碰到的一个问题Could not initialize Service的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker启动容器时出现错误
- 下一篇: idea terminal终端修改为gi