【转】weblogic 发布CXF问题
之前在项目中遇见一个问题就是发布CXF到weblogic中遇见一个问题
java.lang.LinkageError: loader constraints violated when linking org/w3c/dom/UserDataHandler class
at org.apache.cxf.staxutils.StaxUtils.addLocation(StaxUtils.java:984)
at org.apache.cxf.staxutils.StaxUtils.startElement(StaxUtils.java:842)
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:911)
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:798)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:219)
Truncated. see log file for complete stacktrace
>
这个异常在网上很少找到,连google也很难搜索到,最后解决得知是依赖包冲突了
具体解决方法:
类A依赖于类B,但是类A在编译时、加载时使用了两个不同的类B的class,就会出现这个异常。也就是说,这个异常通常指示着jar包冲突。比如,cxf发布到weblogic下时,可能出现:
java.lang.LinkageError: loader constraints violated when linking org/w3c/dom/UserDataHandler class
这个org/w3c/dom/UserDataHandler class至少在三个jar包中:jdk的rt.jar,jaxen.jar,和xmlbeans.jar里。删除后两个jar,我的cxf就能正常运行了。
转自http://buyaozaibeidaole.iteye.com/blog/1672425
补充:如果程序启动时报与上面类似的错误,但类是javax/xml/namespace/QName或NamespaceContext,只需要删除jaxrpc.jar、geronimo-stax-api_1.0_spec-1.0.jar、stax-api-1.0.1.jar中的QName或NamespaceContext类就可以了