关于在java6中使用XFire时碰到的一个问题Could not initialize Service
2016-07-31 11:59
671 查看
在一个采用了XFire作为WebService框架Web项目中,添加由JDK1.6 wsimport命令生成的一个WebService客户端调用,在客户端调用时出现了如下问题
根据错误信息来看,是由于getPortClassMap()方法未找到,导致Could not initialize Service;但是我的客户端是用jdk自带的wsimport生成的,为什么在方法执行过程中会调用XFire相关的代码呢?
再仔细看错误提示,javax.xml.ws.Service.<init>(Service.java:56),原来是这里出了问题,
在这个地方调用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文件中的
就可以了。
这样java6的wsimport生成的客户端就不会再条用XFire相关的代码了。
本文章只记录了该问题的现象和解决方法。
关于本文章记录的解决方法的原理介绍可参考:
http://blog.csdn.net/fenglibing/article/details/7083071
http://blog.csdn.net/conquer0715/article/details/50728458
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相关的代码呢?
再仔细看错误提示,javax.xml.ws.Service.<init>(Service.java:56),原来是这里出了问题,
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相关的代码了。
本文章只记录了该问题的现象和解决方法。
关于本文章记录的解决方法的原理介绍可参考:
http://blog.csdn.net/fenglibing/article/details/7083071
http://blog.csdn.net/conquer0715/article/details/50728458
相关文章推荐
- 在java6中使用XFire时提示错误Could not initialize Service
- 使用Android studio转换Jar包时,遇到的一个问题------> Could not find tools.jar.
- 又碰到一个553 Could not create file.的问题
- 关于spring boot整合mybatis使用oracle数据库出现could not load:oracle.jdbc.driver.OracleDriver问题的终极解决方案
- oozie启动问题:Could not initialize service [org.apache.oozie.service.HadoopAccessorService]
- 关于使用hibernate出现org.hibernate.LazyInitializationException: could not initialize proxy - no Session错误
- 关于注解版Spring 延迟加载报错问题 “could not initialize proxy - no Session“
- xfire java.lang.IllegalStateException: Could not initialize Service
- 关于homebrew使用时遇到的问题: Error: Could not symlink bin/gdb/usr/local/bin is not writable.
- 使用Android studio转换Jar包时,遇到的一个问题Could not find tools.jar.
- 使用struts2+spring+hibernate测试多对多关系映射的时候出现懒加载问题:could not initialize proxy - no Session
- Reporting Service Tips 101(#3) - 关于使用Sum函数会遇到的问题(2)
- 工作中遇到的问题和解决办法8(could not initialize a collection的问题)
- Asp.Net 关于Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies.问题的解决方法。
- 一个C++关于类使用的问题!
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题
- 关于不需用使用top的地方,而必须使用的一个小问题
- Reporting Service Tips 101(#2) - 关于使用Sum函数会遇到的问题(1)
- 解决 关于Silverlight使用WCF时抛出异常 Could not find default endpoint element that references contract...
- VC中一个关于宏的使用问题