Ошибка при подключении JPA к приложению в WildFly: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory

167
11 декабря 2018, 00:50

Подключаю к .war приложению JPA.

Файл persistence.xml:

    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
                 version="2.0">
        <persistence-unit name="library" transaction-type="JTA">
            <jta-data-source>java:jboss/datasources/PostgresLibrary</jta-data-source>
            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
                <property name="hibernate.hbm2ddl.auto" value="validate"/>
            </properties>
        </persistence-unit>
    </persistence>

Вылетает ошибка при деплое на WildFly:

    2018-09-04 12:05:42,150 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 85) MSC000001: Failed to start service jboss.persistenceunit."library.war#library": org.jboss.msc.service.StartException in service jboss.persistenceunit."library.war#library": java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:195)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:125)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:650)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:209)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
        at java.lang.Thread.run(Thread.java:748)
        at org.jboss.threads.JBossThread.run(JBossThread.java:485)
    Caused by: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
        at org.dom4j.DocumentFactory.getInstance(DocumentFactory.java:97)
        at org.hibernate.internal.util.xml.XMLHelper$1.doWork(XMLHelper.java:33)
        at org.hibernate.internal.util.xml.XMLHelper$1.doWork(XMLHelper.java:27)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.workWithClassLoader(ClassLoaderServiceImpl.java:358)
        at org.hibernate.internal.util.xml.XMLHelper.<init>(XMLHelper.java:26)
        at org.hibernate.envers.boot.internal.EnversServiceImpl.initialize(EnversServiceImpl.java:115)
        at org.hibernate.envers.boot.internal.AdditionalJaxbMappingProducerImpl.produceAdditionalMappings(AdditionalJaxbMappingProducerImpl.java:99)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:288)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:875)
        at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167)
        ... 9 more

Все способы в Googl-e перепробованы :(

Answer 1

Вроде бы названия одинаковы, но классы разные. Возникает ClassCastException.

Указывает на то, что объект был преобразован в объект подкласса, экземпляром которого он не является.

Как такое может быть?

Вы не можете преобразовывать объекты между загрузчиками классов. Идентификатор класса состоит из полного имени и загрузчика классов.

То есть если у вас есть две библиотеки dom4j, скажем одна на сервере, а другая в вашем приложении, и они загружаются рзличными класслоадерами, то может возникнуть ошибка преобразования к типу. Постарайтесь использовать только одну библиотеку либо ту, которая на сервере, либо ту, которая в приложении. Возможно надо исключить библиотеку dom4j при сборке приложения.

READ ALSO
Изменение размера шрифта в listview

Изменение размера шрифта в listview

Есть приложение с таблицей Не обновляется БД в андроид приложении, необходимо по нажатию кнопки менять размер шрифтаВ activity_main

133
Netty, слушатель для ChannelFuture

Netty, слушатель для ChannelFuture

При вызове метода await() класса ChannelFuture после отправки сообщения клиенту, выбрасывается исключение:

139
java compiler, generics и наследование

java compiler, generics и наследование

Есть некий обобщенный интерфейс и класс, его реализующий

141
Изучение Spring (план / схема) [закрыт]

Изучение Spring (план / схема) [закрыт]

Задался вопросом изучения Spring, много информации, много видео, много книг, но нет ни одного плана / схемы, иллюстрации последовательности действий

166