关于 web 服务:java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl 不能转换为 com.sun.xml.bind.api.JAXBRIContext

java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.bind.api.JAXBRIContext

我创建了一个 jaxws 网络服务。我完全按照 url

服务完美无误。但是服务器在请求命中时出错。

1
2
3
4
5
6
7
SEVERE: caught throwable
java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.bind.api.JAXBRIContext
    at com.sun.xml.ws.db.glassfish.JAXBRIContextFactory.newContext(JAXBRIContextFactory.java:74)
    at com.sun.xml.ws.spi.db.BindingContextFactory.create(BindingContextFactory.java:149)
    at com.sun.xml.ws.message.jaxb.JAXBMessage.create(JAXBMessage.java:160)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createSOAP11Fault(SOAPFaultBuilder.java:433)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createSOAPFaultMessage(SOAPFaultBuilder.java:210)

我检查了 stackoverflow 和许多其他网站都说 jar 文件冲突。
我使用 java-6-openjdk。
以下是我在码头服务器中的 jar 文件列表。

gmbal-api-only.jar ha-api.jar jaxb-core.jar
jaxb-impl.jar jaxws-rt.jar management-api.jar
policy-2.3.1.jar stax-ex.jar streambuffer-1.5.1.jar

由于上面的罐子不工作,我试过了
到这里
下载 JAX-WS RI 发行版。

但是那些罐子给出了同样的错误。

  • 向我们展示您的代码可能会有所帮助。
  • 嗨,代码在 mkyong.com/webservices/jax-ws/... 我没有在这里添加,因为该教程中的一切都很清楚。我可以毫无问题地启动服务,并且可以完美地看到 wsdl。
  • 我有这个完全相同的错误 - 原来它是由服务器端的 NullPointerException 引起的。修复 NPE 解决了问题!


我也遇到了同样的异常,用谷歌搜索确认这是因为类路径/jar 问题。

我使用 Java 6.0 作为构建和运行时环境,我的项目设置有 jaxb-api.jar 和 jaxb-impl.jar。我只是从类路径中删除了这两个 jar,它就可以工作了。

就像我们拥有 Java 6.0 一样,我们不需要显式地使用 JAX 绑定 jar。 Java 6.0 默认自带。


我的 Java 7 项目也发生了同样的错误。移除
com/sun/xml/bind/jaxb-impl-2.2.6.jar
com/sun/xml/bind/jaxb-xjc-2.2.6.jar

依赖解决了这个问题。

替代解决方案:

clientPort 是一个带有@WebService 注解的接口。

1
2
3
4
    BindingProvider prov = (BindingProvider) clientPort;        
    prov.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointUrl);
    prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, serviceUsername);
    prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, servicePassword);

  • 还有 \\\\t\\\\tSystem.setProperty("javax.xml.bind.JAXBContext", "com.sun.xml.internal.bind.v2.ContextFactory"); \\\\t\\\\tSystem.setProperty("com.sun.xml.internal.ws.transport.http??.client.HttpTransport??tPipe.dump", "true");


检查此线程:Web 服务的 Web 客户端。我认为的主要问题是您有几个版本不同的 jaxb jar。例如,我认为 jaxb 已经是 jaxws-rt.jar 的一部分,这意味着您不需要 jaxb-core.jar 和 jaxb-impl.jar。

  • 嗨,我无法删除上述任何 jar,这给出了不同的 no class found 错误。 IE。如果我删除了你提到的给我 va.lang.NoClassDefFoundError: com/sun/istack/localization/Localizable 的 jar 文件,任何人都可以给我工作的 jar 文件集吗?这是我想的最好的解决方案。