【问题标题】:wildfly 10: java.lang.ClassCastException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactorywildfly 10:java.lang.ClassCastException:org.dom4j.DocumentFactory 无法转换为 org.dom4j.DocumentFactory
【发布时间】:2016-02-21 08:16:37
【问题描述】:

我有一个在wildfly 8.2 中运行良好的maven 应用程序,但是在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"}}

我阅读了this 并且没有其他 dom4j 库。我也阅读了this 并做到了,但是在删除 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>

【问题讨论】:

  • 帮助的信息太少了,但是……当同一个类被不同的类加载器加载时,会抛出这样的异常。也许您可以自己找出为什么不同的类加载器会加载该类。

标签: maven wildfly-10


【解决方案1】:

我刚刚解决了所有休眠依赖项提供的范围和问题!

        <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>

【讨论】:

  • 这是在添加所有 POM 依赖项时使用 Arquillian 最终解决了我的问题
  • 我的所有休眠依赖项都已经证明了作用域,但仍然出现此错误。
  • 确实,添加 provided 解决了这种情况
  • 解决了我的问题,我从编译更改为提供,并且可以正常工作! :)
  • wildfly 15 也有同样的问题,但这并没有解决我的问题
【解决方案2】:

将依赖 dom4j 添加到 pom 并提供范围

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

【讨论】:

  • 感谢@Radzhabov-Kirill,我之前尝试过,但如前所述,NullPointerException 被抛出
  • 这对我有用,但我还必须从 $WILDFLY_HOME/standalone/tmp 中删除我的孤立 .war 文件,如 mwangi 所述。
【解决方案3】:

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

jar 位于$JBOSS_HOME/modules/system/layers/base/org/dom4j/main,你只需用下载的文件替换它,在我的例子中文件是dom4j-1.6.1.jar。我想如果您更改版本(在本文发布时这是最后一个版本),您还应该修改同一文件夹中的module.xml 文件,但我没有尝试过。

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

希望这有助于有同样问题的人。最好的问候

【讨论】:

  • 替换 dom4j-1.6.1.jar 对我有帮助,尽管 Wildfly 附带的那个似乎与 maven Central 的相同。根据cmp,大小相同且相等。
  • 在 wildfly 11 上用完全相同的版本替换它也对我有用。我想这与文件的日期有关,所以触摸它可能会起作用。
  • 覆盖wildfly jars的另一种方法是将dom4j.jar包含在您的应用程序库中并配置部署以加载此jar而不是服务器提供的:issues.jboss.org/browse/…
  • @sebaGra,很好的信息。您的解决方案使应用程序更加“与服务器无关”
  • 我还替换了本地 Wildfly 实例中的 jar - 一切正常。但是 docker 上的 wildfly 相同的技巧不起作用。
【解决方案4】:

如果您使用 hibernate-core 作为依赖项,则应确保提供了范围。 hibernate 工件有一个 dom4j 版本作为依赖项,通过将 &lt;scope&gt; 更改为 provided 来解决冲突。

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

我希望这能让你微笑:)

【讨论】:

  • 奥拉。在偶然发现您的答案之前,我已经在这个问题上苦苦挣扎了几个小时。我正在使用 wildfly 10.1.0.Final 和 10.0.0.Final 。我停止了野蝇。然后我删除了以下文件夹的内容$WILDFLY_HOME/standalone/data$WILDFLY_HOME/standalone/data$WILDFLY_HOME/standalone/tmp 之后,我使用快速入门中所示的最小配置启动了wildfly - github.com/wildfly/quickstart/tree/10.x/hibernate5,我的应用程序工作了!
  • 我确定的一件事是,dom4j 库在部署期间被添加了两次。还要确保在再次重新部署之前您之前没有部署过该项目。这可能会有所帮助。我仍在研究造成这种情况的确切原因以及如何始终避免陷入这个烦人的陷阱
  • @mwangi:在您的评论中,您两次声明了$WILDFLY_HOME/standalone/data。您的意思是在复制和粘贴后更改其中一个文件夹吗?
  • @user1438038 对不起..这是一个错字。要删除的文件夹是 $WILDFLY_HOME/standalone/data$WILDFLY_HOME/standalone/tmp$WILDFLY_HOME/standalone/log。请务必先取消部署所有应用程序,否则 wildfly 将无法正常启动。
【解决方案5】:

我遇到了同样的问题,但最后我所做的是从 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 上测试。

【讨论】:

    【解决方案6】:

    这里的其他建议要么对我不起作用,要么不适用于我的项目。我在this blog 中找到了一个可能的解决方案。基本上它说将Dependencies: org.dom4j export 添加到{your war}/META-INF/MANIFEST.MF。我正在运行 Wildfly 10,并且在我的耳朵和 ejb 项目中这样做似乎都有效。

    【讨论】:

      【解决方案7】:

      将依赖项 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>
      

      【讨论】:

        【解决方案8】:

        在我的 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>
        

        【讨论】:

          【解决方案9】:

          在我的情况下,帮助从 /data 和 /tmp 中删除文件

          【讨论】:

            【解决方案10】:

            遇到了同样的问题,但我使用这里提供的 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。

            如果您需要使用 Wildfly 中提供的 Hibernate 版本以外的其他版本,请按照官方 procedure to update the Hibernate version in Wildly将当前的 Hibernate 5.x jar 替换为较新版本的部分

            【讨论】:

              【解决方案11】:

              有两种方法。

              1 您在 webapp 文件夹中创建一个 META-INF 文件夹。稍后在 META-INF 文件夹中创建 jboss-deployment-structure.xml。

              jboss-deployment-structure.xml

              <?xml version="1.0" encoding="UTF-8"?>
              <jboss-deployment-structure>
                  <deployment>
                      <dependencies>
                          <module name="org.dom4j"/>
                      </dependencies>
                  </deployment>
              </jboss-deployment-structure>
              

              2如果你在 pom xml 中添加了 hibernate-core 然后你编辑它。

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

              【讨论】:

                【解决方案12】:

                我正在使用 Eclipse Neon.3 (4.6.3) 和 Wildfly 10.1.0。

                对我有用的是从&lt;wildfly&gt;\standalone\configuration\standalone_xml_history 目录恢复较旧的standalone.xml 文件。我关闭了服务器,然后用旧备份替换了当前配置文件。

                我不知道配置发生了什么变化(我没有手动更改),但似乎错误消息也可能是由 standalone.xml 的更改引起的。

                也许这些信息会有所帮助,以防其他解决方案都不适合您。

                【讨论】:

                  【解决方案13】:

                  你的EAR可能包含重复的spring jpa配置文件,检查并删除重复文件

                  【讨论】:

                    【解决方案14】:

                    我遇到了同样的问题。我遵循了这个指示,它奏效了。 http://blog.triona.de/development/java/org-dom4j-documentfactory-classcastexception-on-hudson.html

                    根据这篇帖子https://issues.jboss.org/browse/WFLY-5549,我们需要创建一个名为boss-deployment-structure.xml的文件,内容为

                    <?xml version="1.0" encoding="UTF-8"?>
                    <jboss-deployment-structure>
                        <deployment>
                            <dependencies>
                                <module name="org.dom4j"/>
                            </dependencies>
                        </deployment>
                    </jboss-deployment-structure>
                    

                    然后放入../wildfly/modules/system/layers/base/org/jboss/as/product/wildfly-full/dir/META-INF

                    我希望这会有所帮助。

                    【讨论】:

                      猜你喜欢
                      • 2019-03-25
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-06-04
                      • 2016-12-07
                      • 2019-06-07
                      • 2019-08-25
                      • 1970-01-01
                      • 2016-11-02
                      相关资源
                      最近更新 更多