ClassCastException: org.dom4j.DocumentFactory не может быть приведен к org.dom4j.DocumentFactory в WildFly 13
Я испытываю
java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
во время развертывания в WildFly 13.0.0. Наконец, с приложением, которое развертывается нормально на Payara 4.1.2.181 и 5.181, для которых я указал
<class-loader delegate="false"/>
в WEB-INF/glassfish-web.xml
, Я предполагаю, что исключение приведения класса вызвано проблемой загрузки класса (поскольку два равных класса, загруженные разными загрузчиками классов, считаются не идентичными), которых избегает <class-loader delegate="false"/>
поэтому я предполагаю, что указание эквивалента для WildFly является решением KISS.
Есть много терминов относительно (иерархического) использования загрузчика классов на разных серверах Java EE (потому что это не указано в Java EE), и я начал читать о концепции WildFly, однако я изложу то, что я ищу, в GlassFish/Payara условия: избегайте делегирования загрузки классов и сначала берите зависимости / ищите и загружайте классы из развернутой WAR.
Раздутая тема на форумах JBoss об исключении приведения класса, которого не было в GlassFish, предоставляет решение, которое не применимо к моему приложению.
Интересно, что даже не исключая все транзитивные зависимости, обеспечивающие org.dom4j.DocumentFactory
что делает приложение фактически непереносимым между серверами Java EE.
1 ответ
Мне нужно было бы проанализировать ваши пути к классам, чтобы быть уверенным, но я получал аналогичную ошибку при развертывании приложения, которое включало другую версию hibernate, чем та, которая включена в wildfly. Если вы используете Hibernate, то это хороший момент, чтобы начать расследование. если нет, то проверьте, не конфликтуют ли некоторые другие (транзитивные) зависимости с тем, что включено в wildfly.