解析方法时加载约束冲突

Posted

技术标签:

【中文标题】解析方法时加载约束冲突【英文标题】:Loading constraint violation when resolving method 【发布时间】:2020-07-07 13:44:13 【问题描述】:

我需要将项目从 Java 7 迁移到 Java 8 并将其部署在 WAS 9 上(在此迁移应用程序在 Java 7 和 WAS 8.5 上运行之前) 因此,我将 Java 升级到版本 8 并在 pom.xml 中添加了一些必要的依赖项,但我在日志文件中遇到了这个错误,实际上我不知道应该怎么做才能解决它。我错过了一些依赖吗?我应该排除一些 jar 文件吗?

此外,对于这个项目,类加载器在 Websphere 中被配置为最后一个父级。

引起:java.lang.LinkageError:加载约束冲突时 解决方法 “javax/xml/bind/Unmarshaller.unmarshal(Ljavax/xml/stream/XMLStreamReader;Ljava/lang/Class;)Ljavax/xml/bind/JAXBElement;” :加载程序“com/ibm/ws/classloader/CompoundClassLoader@ebfd011c” 类“org/apache/cxf/configuration/spring/JAXBBeanFactory”和加载器 类的“com/ibm/oti/vm/BootstrapClassLoader@38c22f6e” “javax/xml/bind/Unmarshaller”有不同的方法类型 签名于 org.apache.cxf.configuration.spring.JAXBBeanFactory.createJAXBBean(JAXBBeanFactory.java:51)

引起:org.springframework.beans.factory.BeanCreationException: 创建名为 AuthenticationServicePort.jms-conduit 的 bean 时出错: 无法创建类型的内部 bean '(inner bean)' [org.apache.cxf.configuration.spring.JAXBBeanFactory] ​​设置时 bean 属性 'clientConfig';嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“(内部 bean)”的 bean:bean 实例化失败; 嵌套异常是 org.springframework.beans.factory.BeanDefinitionStoreException: 工厂方法 [public static java.lang.Object org.apache.cxf.configuration.spring.JAXBBeanFactory.createJAXBBean(javax.xml.bind.JAXBContext,java.lang.String,java.lang.Class)] 抛出异常;嵌套异常是 java.lang.LinkageError: loading 解决方法时违反约束 “javax/xml/bind/Unmarshaller.unmarshal(Ljavax/xml/stream/XMLStreamReader;Ljava/lang/Class;)Ljavax/xml/bind/JAXBElement;” :加载程序“com/ibm/ws/classloader/CompoundClassLoader@ebfd011c” 类“org/apache/cxf/configuration/spring/JAXBBeanFactory”和加载器 类的“com/ibm/oti/vm/BootstrapClassLoader@38c22f6e” “javax/xml/bind/Unmarshaller”有不同的方法类型 签名

有人知道我该怎么办吗?还是我做错了什么?

在此先感谢

【问题讨论】:

这样的链接错误通常是由打包在不同类加载器中的两个版本的 API 之间的交叉可见性引起的。您是否在应用程序中包含 JAXB 和/或 StAX API(该方法签名中的两件事)的副本,并将类加载器设置为 parent-last 委托?如果是这样...删除它们可能会起作用(它们包含在服务器/JDK中)。 @Jarid 这个项目基本上由 2 个应用程序组成。在这个不起作用的情况下,我从导出的战争中删除了 lib 文件夹中的所有 STAX jar 文件,并且我在 lib 文件夹中没有任何 JAXB jar 文件。在另一个工作正常的情况下,我同时拥有 JAXB 和 STAX jar 文件。尽管该应用程序可以正常工作,但我是否也应该删除它们? 他们可能在工作应用程序中对您没有任何好处,但如果它工作正常,我可能不建议更改任何内容并冒着损坏的风险。 @Jarid 我设法以某种方式解决了它。不知道是不是最正确的,你可以看看下面的评论。 【参考方案1】:

好的,我想通了

这是我所做的:

    jaxb-api 依赖项升级到 2.2 版 将 jaxb-impl 依赖项升级到 2.1.9 版 添加 cxf-rt-transports-http 依赖项(版本 2.7.11) 从导出的war中的lib文件夹中删除所有JAXB jar文件和STAX jar文件,但我只留下了stax2-api-3.1.4.jar在里面

【讨论】:

以上是关于解析方法时加载约束冲突的主要内容,如果未能解决你的问题,请参考以下文章

Composer 错误:无法解析版本约束 >=~2

SQL DEFAULT 约束:使用方法及撤销方法解析

JS解析到MySQL时引用冲突

如何在解析do while / while时解决移位/减少冲突

网页源码中数据存在,使用selenum却解析不到数据的一种解决方法。

如何在项目启动时,加载或解析某配置文件