野飞10:java.lang.ClassCastException: org.dom4j.DocumentFactory无法转换为org.dom4j.DocumentFactory。

40

我有一个使用Maven构建的应用,在WildFly 8.2上可以正常运行,但是当我在WildFly 10上部署它时,出现了以下错误:

[2016-02-21 11:22:08,411] Artifact SaramadIssueTracking:war exploded: Error during artifact deployment. See server log for details.
[2016-02-21 11:22:08,411] Artifact SaramadIssueTracking:war exploded: java.lang.Exception: {"WFLYCTL0080: Failed services" =>
 {"jboss.persistenceunit.SaramadIssueTracking-1#SaramadIssueTracking" => "org.jboss.msc.service.StartException in service 
 jboss.persistenceunit.SaramadIssueTracking-1#SaramadIssueTracking: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory
    Caused by: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory"}}

我读了这篇文章,但是没有其他dom4j库。我也读了这篇文章并且进行了操作,但是在移除dom4j后,我得到了这个错误:

    [2016-02-21 01:46:38,384] Artifact SaramadIssueTracking:war exploded: Error during artifact deployment. See server log for details.
[2016-02-21 01:46:38,385] Artifact SaramadIssueTracking:war exploded: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.undertow.deployment.default-server.default-host./" => "org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./: java.lang.RuntimeException: java.lang.NullPointerException
    Caused by: java.lang.RuntimeException: java.lang.NullPointerException
    Caused by: java.lang.NullPointerException"}}

这是我的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ir.farzanehfar</groupId>
    <artifactId>SaramadIssueTracking</artifactId>
    <version>1</version>
    <packaging>war</packaging>

    <name>SaramadIssueTracking</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <repositories>
        <repository>
            <id>SimpleCaptchaRepository</id>
            <url>http://repo.jfrog.org/artifactory/libs-releases/</url>
        </repository>
    </repositories>

    <dependencies>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.2</version>
        </dependency>

        <dependency>
            <groupId>org.primefaces.themes</groupId>
            <artifactId>all-themes</artifactId>
            <version>1.0.10</version>
        </dependency>

        <dependency>
            <groupId>org.primefaces.extensions</groupId>
            <artifactId>primefaces-extensions</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.primefaces.extensions</groupId>
            <artifactId>resources-ckeditor</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.1.0.Final</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>12.0</version>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.1</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

        <dependency>
            <groupId>com.jhlabs</groupId>
            <artifactId>imaging</artifactId>
            <version>01012005</version>
        </dependency>

        <dependency>
            <groupId>axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.11</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2
信息不足以提供帮助,但是... 当相同的类被不同的类加载器加载时,就会抛出这样的异常。也许你可以自己找出为什么会有不同的类加载器加载该类。 - Seelenvirtuose
15个回答

48

我刚刚将所有的 Hibernate 依赖项设置为提供范围,问题得到解决!

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

这就是最终解决我的问题,使用Arquillian并添加所有POM依赖项。 - Henry
3
我已经为所有的 Hibernate 依赖项提供了范围,但仍然遇到这个错误。 - Magick
实际上,添加<scope>provided</scope>可以解决这个问题。 - mani
问题解决了,我将编译改为提供依赖项,现在可以正常工作了! :) - DEREK LEE
我在Wildfly 15上遇到了同样的问题,但这并没有解决我的问题。 - Thamer

18

将dom4j依赖项添加到pom.xml文件中,并将其范围设置为provided。

<dependency>
   <groupId>dom4j</groupId>
   <artifactId>dom4j</artifactId>
   <version>1.6.1</version>
   <scope>provided</scope>
</dependency>

谢谢@Radzhabov-Kirill,我之前尝试过这个方法,但是像之前提到的那样,抛出了NullPointerException异常。 - h.f
2
这对我有用,但我还必须像mwangi提到的那样从$WILDFLY_HOME/standalone/tmp中删除我的孤立的.war文件。 - Tad

11

我最近在使用dom4j库和Wildfly 10时遇到了同样的问题。我找到了这篇帖子(葡萄牙语),并用从Maven Central下载的dom4j库替换了自带的Wildfly库,这解决了问题。

该jar文件位于$JBOSS_HOME/modules/system/layers/base/org/dom4j/main,您只需将其替换为下载的文件,对我而言文件名为dom4j-1.6.1.jar。我想如果您更改版本(在本文撰写时,这是最新版本),您还应修改相同文件夹中的module.xml文件,但我尚未尝试。

之前我也尝试过h.f的自答,但没有解决我的问题。

希望这对有同样问题的人有所帮助。最好的问候。


3
替换 dom4j-1.6.1.jar 对我很有帮助,尽管与来自 Maven 中央库的版本相比,WildFly 自带的版本看起来完全相同。它们大小相同,并且根据 cmp 命令也是一模一样的。 - jon martin solaas
1
将wildfly 11上的相同版本替换为它,对我也起作用了。我猜这与文件的日期有关,所以只需轻触它即可。 - Vinicius Braz Pinto
覆盖wildfly jars的另一种选择是将dom4j.jar包含在您的应用程序库中,并配置部署以加载此jar而不是服务器提供的jar:https://issues.jboss.org/browse/WFLY-5549?focusedCommentId=13173976&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13173976 - SebaGra
@sebaGra,非常好的信息。您的解决方案使应用程序更加“服务器无关”。 - Alvaro Pedraza
我还在本地的Wildfly实例中替换了jar文件-一切正常工作。但是同样的方法在Docker上的Wildfly上不起作用。 - Adam

11

如果您使用hibernate-core作为依赖项,您应该确保它的范围是provided。hibernate工件有一个dom4j版本作为依赖项,将<scope>更改为provided可以解决冲突。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.1.Final</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>

我希望这能让你微笑 :)


6
你好。我在苦苦挣扎寻找解决方法几个小时后,在偶然间看到了你的回答。我使用的是Wildfly 10.1.0.Final和10.0.0.Final版本。我停止了Wildfly服务,然后删除了以下文件夹中的所有内容:$WILDFLY_HOME/standalone/data、$WILDFLY_HOME/standalone/data和$WILDFLY_HOME/standalone/tmp。之后,我使用快速入门中所示的最小配置启动了Wildfly,并成功运行了我的应用程序! - mwangi
我确定的一件事是,在部署过程中,dom4j库被添加了两次。同时,请确保在重新部署之前没有先前已经部署过该项目。这可能会有所帮助。我仍在研究导致这种情况的确切原因以及如何始终避免陷入这种令人恼火的陷阱。 - Rasheed
@mwangi:在你的评论中,你重复了“$WILDFLY_HOME/standalone/data”两次。你是不是在复制粘贴后想要更改其中一个文件夹? - user1438038
4
@user1438038 对不起,那是一个打字错误。需要删除的文件夹是 $WILDFLY_HOME/standalone/data$WILDFLY_HOME/standalone/tmp$WILDFLY_HOME/standalone/log。请确保先卸载所有应用程序,否则wildfly将无法正常启动。 - mwangi

3
这里的其他建议要么对我没用,要么不适用于我的项目。我在这篇博客中找到了一个可能的解决方案。基本上它说要在{你的war文件}/META-INF/MANIFEST.MF中添加Dependencies: org.dom4j export。我正在运行的是Wildfly 10,在我的ear和ejb项目中都这样做似乎可以解决问题。

3

我曾经遇到相同的问题,但最终我所做的是从pom中删除(冗余的)Hibernate库。

由于Wildfly已经使用Hibernate作为JPA提供程序(https://docs.jboss.org/author/display/WFLY10/JPA+Reference+Guide#JPAReferenceGuide-Introduction),您根本不需要提供这些类(除非您直接使用Hibernate类)。

因此,最小配置可以正常工作:

<project>
  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

和 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="mysql_hbm" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:/jdbc/MySqlDS</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
        <property name="hibernate.show_sql" value="true"/>
    </properties>
</persistence-unit>

在Wildfly 10上测试通过。


2
在我的情况下,帮助删除了 /data 和 /tmp 目录下的文件。最初的回答。

2

从hibernate依赖中排除dom4j。

检查生成的acme.war/WEB-INF/lib目录下是否有dom***.jar文件。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.8.Final</version>
    <exclusions>
        <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.8.Final</version>
    <exclusions>
        <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2
在我的ear文件的META-INF下面的'jboss-deployment-structure.xml'中添加以下内容解决了问题,并且在weblogic和wildfly中都可以工作。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.dom4j" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

1

我曾遇到同样的问题,但是通过使用Hibernate5官方快速入门教程https://github.com/wildfly/quickstart/tree/11.x/hibernate5,我解决了这个问题。

尝试使用Hibernate5快速入门教程,应该可以解决问题。

查看pom.xml文件,其中包含

<!-- Import the JPA API, we use provided scope as the API is included in WildFly -->
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <scope>provided</scope>
    </dependency>

    <!-- Bean Validation Implementation -->
    <!-- Provides portable constraints such as @Email -->
    <!-- Hibernate Validator is shipped in WildFly -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <scope>provided</scope>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!--Import dependencies to hibernate packages(eg. hibernate-core)
        depending on features you want to use like Hibernate Session used in the
        quickstart -->
    <!--please note that scope is provided as these jars are shipped
        with as7 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <scope>provided</scope>
    </dependency>

包含它并且它将工作。我不得不取消部署我的应用程序并重新启动wildfly。

如果您需要使用另一个Hibernate版本而不是Wildfly提供的版本,请按照官方在Wildly中更新Hibernate版本的过程替换当前的Hibernate 5.x jar文件为新版本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接