我有一个链接错误,似乎 Jboss (5.2) 提供了该类的一个版本 org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller
而我在某处提供了该类的另一种实现。我已经搜索了该类,它是包含它的 Maven 项目 cxf-rt-databinding-jaxb
,因此我已从使用 Apache CXF 的依赖项中排除该项目,但错误仍然存在。
我不太明白错误消息,尤其是部分...具有类型的不同 Class 对象 Shoulder.addMtomAttachment(Ljavax/activation/DataHandler; Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
- 什么是shaller?变量的方法调用怎么可能是类型?
- 如何找到负责将
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)
最佳答案
How can do I find the dependency that is responsible for packaging JAXBAttachmentMarchaller into the project?
在网络上搜索捆绑该文件的 Maven 项目。对我来说是cxf-rt-frontend-jaxws
.
您需要做的是从程序集中删除此依赖项,它不能包含在 WAR/EAR 文件中,因为 JBoss 提供了另一个版本的依赖项并且存在冲突。
查看您的pom.xml
对于 cxf-rt-frontend-jaxws
并确保它具有标签 <scope>provided</scope>
因为我们希望服务器提供依赖关系。如果您没有cxf-rt-frontend-jaxws
在你的pom.xml
这意味着该项目是您的依赖项之一的子依赖项。这个问题很难解决,因为依赖关系可能存在于多个子依赖关系中。有些人建议使用mvn dependency:tree
以便找到哪些项目负责将依赖项捆绑到 WAR/EAR 文件中。
我找到了负责的项目,它是一个内部组件,因此我可以轻松添加 <scope>provided</scope>
到要删除的组件 cxf-rt-frontend-jaxws*jar
来自 WAR/EAR 文件。我通过提取依赖项并列出 WEB-INF/lib
来验证该依赖项不再捆绑在 WAR 文件中。它已不再列出。
如果无法更改范围,则必须使用排除标记将其从程序集中删除。
关于java - Apache CXF (JAXBattachmentMarhaller) 和 JBOSS 5.2 的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30104579/