Jakarta ee ClassCastException:org.dom4j.DocumentFactory无法转换为WildFly 13中的org.dom4j.DocumentFactory

Jakarta ee ClassCastException:org.dom4j.DocumentFactory无法转换为WildFly 13中的org.dom4j.DocumentFactory,jakarta-ee,wildfly,classcastexception,java-ee-7,classloading,Jakarta Ee,Wildfly,Classcastexception,Java Ee 7,Classloading,我正在经历 java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory 在部署到WildFly 13.0.0.Final的过程中,应用程序在Payara 4.1.2.181和5.181上部署得很好,我已经为其指定了 <class-loader delegate="false"/> 在WEB-INF/glassfish WEB.xml中。我

我正在经历

java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
在部署到WildFly 13.0.0.Final的过程中,应用程序在Payara 4.1.2.181和5.181上部署得很好,我已经为其指定了

<class-loader delegate="false"/>

WEB-INF/glassfish WEB.xml
中。我假设类强制转换异常是由类加载问题引起的(因为由不同的类加载程序加载的两个相等的类被认为是不相同的),而
避免了这一问题,因此我假设为WildFly指定等效的类是KISS解决方案

关于在不同的JavaEE服务器中使用classloader(分层)有很多术语(因为JavaEE没有指定它),我开始阅读WildFly的概念,然而,我将用GlassFish/Payara的术语来表达我所寻找的:避免类加载委托,首先从已部署的WAR中获取依赖项/搜索并加载类

提供不适用于我的应用程序的解决方案


有趣的是,即使不排除所有可传递的依赖项,也会提供
org.dom4j.DocumentFactory
,这使得应用程序在Java EE服务器之间有效地不可移植。我需要分析您的类路径以确保,但我在部署一个应用程序时遇到了类似的错误,该应用程序包含的hibernate版本与wildfly中包含的版本不同。如果您使用的是hibernate,那么这就是开始调查的好时机。如果没有,那么检查其他(可传递的)依赖项是否与wildfly中包含的内容冲突。

我开始认为wildfly没有像GlassFish/Payara那样的类装入器隔离。在这种情况下,我将坚持使用Payara,因为这是一个关键特性,可以避免在切换服务器时出现不必要的困难。