JBoss上的JaxWS ClassCastException

我正在使用JBoss 5.1.0.GA(用于JDK6)和jaxws 2.2.6。 当我调用webservice时,我得到以下exception:

java.util.ServiceConfigurationError:javax.xml.ws.spi.Provider:无法实例化提供程序org.jboss.ws.core.jaxws.spi.ProviderImpl:org.jboss.resource.work.WorkWrapper中的java.lang.ClassCastException .completed(WorkWrapper.java:283)
at org.jboss.util.threadpool.BasicTaskWrapper.taskCompleted(BasicTaskWrapper.java:367)atg.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:268)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886)java.lang.Thread.run(Thread.java:680)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)

引起:java.util.ServiceConfigurationError:javax.xml.ws.spi.Provider:无法实例化Provider org.jboss.ws.core.jaxws.spi.ProviderImpl:java.util.ServiceLoader中的java.lang.ClassCastException。失败(ServiceLoader.java:207)java.util.ServiceLoader.access $ 100(ServiceLoader.java:164)java.util.ServiceLoader $ LazyIterator.next(ServiceLoader.java:353)java.util.ServiceLoader $ 1.next (ServiceLoader.java:421)位于javax.xml的javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java:180)javax.xml.ws.spi.Provider.provider(Provider.java:140)。 ws.Service。(Service.java:92)
[…]
… 3更多引起:java.lang.Class.cast(Class.java:2990)java.lang.ClassCastException java.util.ServiceLoader $ LazyIterator.next(ServiceLoader.java:345)
……还有14个

我也尝试从3.1.2.GA更新jbossws到版本3.4.0,没有任何改变。 我已经阅读了很多关于检查lib /赞同JBoss中的jar的建议,所以这是内容:

activation.jar jaxb-api.jar jaxws-api.jar jbossws-native-factories.jar resolver.jar serializer.jar stax-api.jar xalan.jar xercesImpl.jar 

我还将交换机-verbose:class添加到JVM:

 [Loaded org.jboss.ws.core.jaxws.spi.ProviderImpl from jar:file:/Users/carlo/jboss-5.1.0.GA/common/lib/jbossws-native-core.jar!/] 

该类扩展了javax.xml.ws.spi.Provider (http://bit.ly/LK9bNE)

有人可以帮我解决这里发生的事吗?

编辑1
好的,所以我看到ClassCastException来自:ServiceLoader.java第345行

 S p = service.cast(Class.forName(cn, true, loader).newInstance()); 

当调用service.cast时, thisjavax.xml.ws.spi.Provider而要转换的arg是org.jboss.ws.core.jaxws.spi.ProviderImpl 。 我仍然无法理解这个问题。

最后,我设法解决了我的问题:我把jaxws-rt.jar放在$JBOSS_HOME/lib/endorsed

编辑
我在JBoss 5.1 EAP上遇到了同样的问题,为了解决它,步骤有点不同:在$JBOSS_HOME/lib/endorsed我删除了旧的jaxb-api.jar,然后复制了

  • JAXB-api.jar文件
  • JAXB – impl.jar中
  • JAXWS-api.jar文件
  • JAXWS-的rt.jar

来自最新的jaxws-ri软件包,最终还是有效的。

我遇到了同样的问题。 我正在运行JBoss 5.1 EAP和JDK 1.6_22。

我做的事情略有不同。 我将Carlo的解决方案与此解决方案相结合。

我在$ JBOSS_HOME / server // lib / endorsed下创建了一个endorsed文件夹。 然后我复制了streambuffer.jar,stax-ex.jar,policy.jar,jaxws-rt.jar,jaxws-api.jar,jaxb-impl.jar,jaxb-api.jar和gmbal-api-only.jar。

我单独留下了$ JBOSS_HOME / lib / endors。

这样做,我能够让它全部工作

我在JBoss 5.1 EAP上遇到了同样的问题而不是将jar文件放入JBOSS应用程序服务器中,当你通过使用覆盖服务器类隔离WAR来改变类加载逻辑时,它更加强大( http://www.jboss.org/community/wiki/ classloadingconfiguration )在我的情况下,我有3个环境。 使用此解决方案,我可以将war文件从一个JBOSS实例移动到另一个JBOSS实例,它仍然可以工作。

我解决了这个问题:将其添加到jboss-web.xml:

   com.example:archive=unique-archive-name java2ParentDelegation=false   

并将requierd jar加入战争中(jaxb-api.jar,jaxb-impl.jar,jaxws-api.jar,jaxws-rt.jar)