Java Apache CXF(JAXBAttachmentMarchaller)和JBOSS 5.2的链接错误

Java Apache CXF(JAXBAttachmentMarchaller)和JBOSS 5.2的链接错误,java,maven,jboss,cxf,linkageerror,Java,Maven,Jboss,Cxf,Linkageerror,我有一个链接错误,Jboss 5.2似乎提供了类org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller的一个版本,而我在某处提供了该类的另一个实现。我搜索了这个类,它是包含它的maven项目cxf rt databinding jaxb,因此我从使用ApacheCXF的依赖项中排除了该项目,但错误仍然存在 我真的不理解错误消息,尤其是部分…对于类型shaller.addMtomAttachmentLjavax/activation/Data

我有一个链接错误,Jboss 5.2似乎提供了类org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller的一个版本,而我在某处提供了该类的另一个实现。我搜索了这个类,它是包含它的maven项目cxf rt databinding jaxb,因此我从使用ApacheCXF的依赖项中排除了该项目,但错误仍然存在

我真的不理解错误消息,尤其是部分…对于类型shaller.addMtomAttachmentLjavax/activation/DataHandler有不同的类对象;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String

谢勒是什么?变量的方法调用怎么可能是类型? 如何找到负责将JAXBAttachmentMarchaller打包到项目中的依赖项? 如果这个问题还有其他解决办法,请纠正我

java.lang.LinkageError: loader constraint violation: when resolving overridden method
"org.apache.cxf.jaxb.attachment.JAXBAttachmentMarshaller
        .addMtomAttachment(Ljavax/activation/DataHandler;Ljava/lang/String;
                           Ljava/lang/String;)Ljava/lang/String;" 
the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader)
of the current class, org/apache/cxf/jaxb/attachment/JAXBAttachmentMarshaller, 
and its superclass loader (instance of <bootloader>), have different Class objects for 
the type shaller.addMtomAttachment(Ljavax/activation/DataHandler; Ljava/lang/String;
                          Ljava/lang/String;)Ljava/lang/String; used in the signature
at org.apache.cxf.jaxb.JAXBDataBase.getAttachmentMarshaller(JAXBDataBase.java:82)
at org.apache.cxf.jaxb.io.DataWriterImpl.createMarshaller(DataWriterImpl.java:127)
at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleHeaderPart(SoapOutInterceptor.java:242)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:164)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:81)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:61)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
at com.sun.proxy.$Proxy440.getDeviceDetails(Unknown Source)
at com.company.MyMethod(MyClass.java:52)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
如何找到负责将JAXBAttachmentMarchaller打包到项目中的依赖项

在web上搜索绑定该文件的maven项目。对我来说,这是cxf rt前端jaxws

您需要做的是从程序集中删除此依赖项,它不能包含在WAR/EAR文件中,因为JBoss提供了该依赖项的另一个版本,并且存在冲突

在pom.xml中查找cxf rt前端jaxws,并确保它提供了标记,因为我们希望服务器提供依赖项。如果pom.xml中没有cxf rt前端jaxws,则意味着该项目是其中一个依赖项的子依赖项。这很难解决,因为依赖关系可以存在于多个子依赖关系中。有些人建议使用mvn dependency:tree,以便找到哪些项目负责将依赖项绑定到WAR/EAR文件中

我找到了负责的项目,它是一个内部组件,因此我可以轻松地将提供的添加到组件中,以从WAR/EAR文件中删除cxf-rt前端jaxws*jar。通过提取依赖项并在不再列出的位置列出WEB-INF/lib,我验证了依赖项不再捆绑在WAR文件中

如果无法更改范围,则必须使用exclude标记将其从程序集中删除