java - Apache CXF (JAXBattachmentMarhaller) 和 JBOSS 5.2 的链接错误

标签 java maven jboss cxf linkageerror

我有一个链接错误,似乎 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/

相关文章:

java - 如何访问在java中使用它的唯一类的私有(private)嵌套类对象

java - 将数据集写入不同的 XML 文件

java - 在单元测试中启动一个简单的独立 hadoop 服务器

java - 有没有像 Perl 的 CPAN 这样的集中式 Java 库存储库?

java - JBoss 5.1 : jar in server lib with dependency

java - JVM 在 java.util.zip.ZipFile.getEntry 中崩溃

java - hasNextLine() 总是返回 false

java - 使用 Java AWT 将图像添加到面板

java - 检查是否在gradle中正确添加了依赖项

java - 列出打包 war 中的文件