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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 03:34:54  来源:igfitidea点击:

JaxWS ClassCastException on JBoss

javajax-wsjboss5.x

提问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, thisis javax.xml.ws.spi.Providerand the arg to cast is org.jboss.ws.core.jaxws.spi.ProviderImpl. I still fail to understand the problem though.

当 service.cast 被调用时,thisisjavax.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.jarin $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/endorsedI 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)