使用spring和JAX-WS创建Web服务客户端..我收到以下错误
在谷歌上搜索了很多关于它的事情,我注意到了由于旧版本的JAXB(jaxb-impl:jar:2.1.3:compile)而发生这种情况,该版本由maven传递,因此导致冲突。
尝试使用
修复它但我的所有尝试都失败了..有人可以帮助我解决这个问题
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy21.isValidEmail(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:520)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:494)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.invoke(JaxWsPortClientInterceptor.java:481)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy22.isValidEmail(Unknown Source)
at com.rosettastone.succor.webservice.EmailValidateClientImpl.main(EmailValidateClientImpl.java:15)
Caused by: java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.<clinit>(SOAPFaultBuilder.java:533)
... 15 more
答案 0 :(得分:1)
此异常很可能是由从不同类加载器加载的JAX-WS和JAXB引起的。这些库最初是与JDK分开开发的,因此必须作为应用程序的一部分进行部署,但现在是JDK的一部分。如果继续将它们作为应用程序的一部分进行部署,则它们在类路径中可用两次,并且可能会导致诸如ClassCastException之类的互操作性问题。
最简单的解决方案是不再使用应用程序部署它们。如果这是由maven管理的传递依赖,您可以通过排除它来实现。在eclipse中,这很简单:
答案 1 :(得分:0)
您可以通过运行mvn dependency:tree来获取所有依赖项树,然后排除导致您出现问题的依赖项。
关于jaxws / jaxb问题,有很多方法可以指定特定版本,但我们需要知道您的确切意图。 (wsgen,wsimport,运行时发生的问题?)
答案 2 :(得分:0)
我点击了这里,jersey-json pom正在引入一个明确版本的jaxb-impl。排除这种依赖性的maven为我做了诀窍。
更多信息:
http://jersey.java.net/nonav/documentation/latest/chapter_deps.html
(不完全确定为什么它会获得不同版本的api和impl类,因为jaxb-impl pom引入了它的首选jaxb-api,AFAICT上没有任何时髦的类加载,所以无论是从JRE还是从JRE加载显式的jaxb JAR,它应该有兼容的类......但它没有,并且排除导致它全部工作!)