Apache CXF (JAXBAttachmentMarchaller) 和 JBOSS 5.2 的链接错误
Linkage Error with Apache CXF (JAXBAttachmentMarchaller) and JBOSS 5.2
我有一个链接错误,似乎 Jboss (5.2) 提供了 class org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller
的一个版本,而我在某个地方提供了 class 的另一种实现.我搜索了 class,它是包含它的 Maven 项目 cxf-rt-databinding-jaxb
,所以我从使用 Apache CXF 的依赖项中排除了该项目,但错误仍然存在。
我不太理解错误消息,尤其是 部分...对于类型 shaller.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-file 中,因为 JBoss 提供了另一个版本的依赖项并且存在冲突。
在您的 pom.xml
中查找 cxf-rt-frontend-jaxws
并确保它具有标签 <scope>provided</scope>
,因为我们希望服务器提供依赖项。如果您的 pom.xml
中没有 cxf-rt-frontend-jaxws
,则表示该项目是您的其中一个依赖项的子依赖项。这很难解决,因为依赖项可以存在于多个子依赖项中。有些人建议使用 mvn dependency:tree
以查找负责在 WAR/EAR-file.
中捆绑依赖项的项目。
我找到了负责的项目,它是一个内部组件,因此我可以轻松地将 <scope>provided</scope>
添加到该组件以从 WAR/EAR-file 中删除 cxf-rt-frontend-jaxws*jar
。我通过提取依赖项并在不再列出的地方列出 WEB-INF/lib
来验证依赖项不再捆绑在 WAR 文件中。
如果无法更改作用域,则必须使用排除标记将其从程序集中删除。
我有一个链接错误,似乎 Jboss (5.2) 提供了 class org.apache.cxf.jaxb.attachment.JAXBAttachmentMarchaller
的一个版本,而我在某个地方提供了 class 的另一种实现.我搜索了 class,它是包含它的 Maven 项目 cxf-rt-databinding-jaxb
,所以我从使用 Apache CXF 的依赖项中排除了该项目,但错误仍然存在。
我不太理解错误消息,尤其是 部分...对于类型 shaller.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-file 中,因为 JBoss 提供了另一个版本的依赖项并且存在冲突。
在您的 pom.xml
中查找 cxf-rt-frontend-jaxws
并确保它具有标签 <scope>provided</scope>
,因为我们希望服务器提供依赖项。如果您的 pom.xml
中没有 cxf-rt-frontend-jaxws
,则表示该项目是您的其中一个依赖项的子依赖项。这很难解决,因为依赖项可以存在于多个子依赖项中。有些人建议使用 mvn dependency:tree
以查找负责在 WAR/EAR-file.
我找到了负责的项目,它是一个内部组件,因此我可以轻松地将 <scope>provided</scope>
添加到该组件以从 WAR/EAR-file 中删除 cxf-rt-frontend-jaxws*jar
。我通过提取依赖项并在不再列出的地方列出 WEB-INF/lib
来验证依赖项不再捆绑在 WAR 文件中。
如果无法更改作用域,则必须使用排除标记将其从程序集中删除。