java JBoss 上的 JaxWS ClassCastException
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11048655/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JaxWS ClassCastException on JBoss
提问by Carlo
I'm using JBoss 5.1.0.GA (for JDK6), and jaxws 2.2.6. When I invoke the webservice, I get the following exception:
我正在使用 JBoss 5.1.0.GA(用于 JDK6)和 jaxws 2.2.6。当我调用 webservice 时,我收到以下异常:
java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.ws.core.jaxws.spi.ProviderImpl could not be instantiated: java.lang.ClassCastException at org.jboss.resource.work.WorkWrapper.completed(WorkWrapper.java:283)
at org.jboss.util.threadpool.BasicTaskWrapper.taskCompleted(BasicTaskWrapper.java:367) at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:268) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680)Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.ws.core.jaxws.spi.ProviderImpl could not be instantiated: java.lang.ClassCastException at java.util.ServiceLoader.fail(ServiceLoader.java:207) at java.util.ServiceLoader.access$100(ServiceLoader.java:164) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353) at java.util.ServiceLoader$1.next(ServiceLoader.java:421) at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java:180) at javax.xml.ws.spi.Provider.provider(Provider.java:140) at javax.xml.ws.Service.(Service.java:92)
[...]
... 3 more Caused by: java.lang.ClassCastException at java.lang.Class.cast(Class.java:2990) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345)
... 14 more
java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.ws.core.jaxws.spi.ProviderImpl 无法实例化: java.lang.ClassCastException at org.jboss.resource.work.WorkWrapper .completed(WorkWrapper.java:283)
在 org.jboss.util.threadpool.BasicTaskWrapper.taskCompleted (BasicTaskWrapper.java:367)在 org.jboss.util.threadpool.BasicTaskWrapper.run (BasicTaskWrapper.java:268 ) 在 java util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:680)引起: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.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java:180) 在 javax.xml.ws.spi.Provider.provider(Provider.java:140) 在 javax.xml。 ws.Service.(Service.java:92)
[...]
... 3 导致:java.lang.ClassCastException at java.lang.Class.cast(Class.java:2990) at java.util.ServiceLoader $LazyIterator.next(ServiceLoader.java:345)
……还有 14 个
I also tried to update jbossws to version 3.4.0 from 3.1.2.GA, nothing changed. I've read a lot of suggestions related to checking jars in lib/endorsed of JBoss, so this is the content:
我还尝试将 jbossws 从 3.1.2.GA 更新到 3.4.0 版,但没有任何改变。我已经阅读了很多与检查 JBoss 的 lib/endorsed 中的 jars 相关的建议,所以这是内容:
activation.jar
jaxb-api.jar
jaxws-api.jar
jbossws-native-factories.jar
resolver.jar
serializer.jar stax-api.jar
xalan.jar
xercesImpl.jar
I've also added the switch -verbose:class to the JVM:
我还向 JVM 添加了开关 -verbose:class:
[Loaded org.jboss.ws.core.jaxws.spi.ProviderImpl from jar:file:/Users/carlo/jboss-5.1.0.GA/common/lib/jbossws-native-core.jar!/]
and that class extends javax.xml.ws.spi.Provider
(http://bit.ly/LK9bNE)
并且该课程扩展javax.xml.ws.spi.Provider
(http://bit.ly/LK9bNE)
Can someone help me what's going on here?
有人可以帮助我这里发生了什么吗?
EDIT 1
Ok, so I see that the ClassCastException is raised from: ServiceLoader.java line 345
编辑 1
好的,所以我看到 ClassCastException 是从以下位置引发的:ServiceLoader.java line 345
S p = service.cast(Class.forName(cn, true, loader).newInstance());
when service.cast is called, this
is javax.xml.ws.spi.Provider
and the arg to cast is org.jboss.ws.core.jaxws.spi.ProviderImpl
.
I still fail to understand the problem though.
当 service.cast 被调用时,this
isjavax.xml.ws.spi.Provider
并且要转换的参数是org.jboss.ws.core.jaxws.spi.ProviderImpl
。我仍然无法理解这个问题。
采纳答案by Carlo
Finally, I've managed to solve my problem: I put jaxws-rt.jar
in $JBOSS_HOME/lib/endorsed
.
最后,我已经成功地解决我的问题:我把jaxws-rt.jar
在$JBOSS_HOME/lib/endorsed
。
EDIT
I had the same problem on JBoss 5.1 EAP, and to solve it, the steps are a little different:
in $JBOSS_HOME/lib/endorsed
I removed the old jaxb-api.jar, then copied
编辑
我在 JBoss 5.1 EAP 上遇到了同样的问题,为了解决它,步骤有点不同:在$JBOSS_HOME/lib/endorsed
我删除了旧的 jaxb-api.jar,然后复制
- jaxb-api.jar
- jaxb-impl.jar
- jaxws-api.jar
- jaxws-rt.jar
- jaxb-api.jar
- jaxb-impl.jar
- jaxws-api.jar
- jaxws-rt.jar
from the latest jaxws-ri package, and eventually it worked.
来自最新的 jaxws-ri 包,最终它起作用了。
回答by boyd4715
I faced the same issue. I am running JBoss 5.1 EAP along with JDK 1.6_22.
我遇到了同样的问题。我正在运行 JBoss 5.1 EAP 和 JDK 1.6_22。
I did things slightly different. I combined the solution by Carlo plus this solution.
我做的事情略有不同。我结合了 Carlo 的解决方案加上这个解决方案。
I created an endorsed folder under $JBOSS_HOME/server//lib/endorsed. I then copied over streambuffer.jar, stax-ex.jar, policy.jar, jaxws-rt.jar, jaxws-api.jar, jaxb-impl.jar, jaxb-api.jar and gmbal-api-only.jar.
我在 $JBOSS_HOME/server//lib/endorsed 下创建了一个认可的文件夹。然后我复制了 streambuffer.jar、stax-ex.jar、policy.jar、jaxws-rt.jar、jaxws-api.jar、jaxb-impl.jar、jaxb-api.jar 和 gmbal-api-only.jar。
I left the $JBOSS_HOME/lib/endorsed alone.
我单独留下了 $JBOSS_HOME/lib/endorsed。
Doing this, I was able to get it to work it all to work
这样做,我能够让它正常工作
回答by mrh
I had the same problem on JBoss 5.1 EAP Instead of putting jar files into JBOSS application server it is more robust when you alter class loading logic by isolating WAR with Overriding Server Classes (http://www.jboss.org/community/wiki/classloadingconfiguration) In my case I have 3 environments. With this solution I can move war file from one JBOSS instance to another and it will still work.
我在 JBoss 5.1 EAP 上遇到了同样的问题 当您通过将 WAR 与覆盖服务器类(http://www.jboss.org/community/wiki/ classloadingconfiguration) 就我而言,我有 3 个环境。使用此解决方案,我可以将 war 文件从一个 JBOSS 实例移动到另一个实例,它仍然可以工作。
I resolved this problem by: Adding this to jboss-web.xml:
我通过以下方式解决了这个问题:将其添加到 jboss-web.xml:
<class-loading java2ClassLoadingCompliance="false">
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</class-loading>
...
...
and by adding requierd jars into war (jaxb-api.jar, jaxb-impl.jar, jaxws-api.jar, jaxws-rt.jar)
并通过将需要的 jars 添加到War中(jaxb-api.jar、jaxb-impl.jar、jaxws-api.jar、jaxws-rt.jar)