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 发行版。
但是那些罐子给出了同样的错误。
我也遇到了同样的异常,用谷歌搜索确认这是因为类路径/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); |
检查此线程:Web 服务的 Web 客户端。我认为的主要问题是您有几个版本不同的 jaxb jar。例如,我认为 jaxb 已经是 jaxws-rt.jar 的一部分,这意味着您不需要 jaxb-core.jar 和 jaxb-impl.jar。