引起:org.dom4j.DocumentException:org.dom4j.DocumentFactory无法强制转换为org.dom4j.DocumentFactory

时间:2015-03-29 13:20:15

标签: deployment jboss war wildfly-8 dom4j

我有一个使用hibernate>的gradle项目。 4。如果我在Apache tomcat中运行我的war文件,我不会收到任何错误。但是当我在Wildfly 8.2中部署它时,我得到以下异常

Caused by: org.hibernate.InvalidMappingException: Error while parsing file: /G:/wildfly-8.2.0.Final/bin/content/mywar-1.0.war/WEB-INF/classes/com/mysite/
hbm/Role.hbm.xml
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1182) [hibernate-ent
itymanager-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:848) [hibernate-entitymanager-4.3.7.Fi
nal.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4.3.7.Fi
nal.jar:4.3.7.Final]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar:4.
3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) [hibernate-entitymanager-4.3.7.Final.
jar:4.3.7.Final]
        at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1.Final.jar:]
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
        ... 8 more
Caused by: org.hibernate.InvalidMappingException: Unable to read XML
        at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:375) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:304) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:518) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:514) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.add(Configuration.java:688) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:726) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildHibernateConfiguration(EntityManagerFactoryBuilderImpl.java:1177) [hibernate-ent
itymanager-4.3.7.Final.jar:4.3.7.Final]
        ... 14 more
Caused by: org.dom4j.DocumentException: org.dom4j.DocumentFactory cannot be cast to org.dom4j.DocumentFactory Nested exception: org.dom4j.DocumentFactory cannot
 be cast to org.dom4j.DocumentFactory
        at org.dom4j.io.SAXReader.read(SAXReader.java:484) [dom4j-1.6.1.jar:1.6.1]

我刚在我的Gradle文件中添加了一个排除项,如

runtime.exclude group: "dom4j" 

现在,当我运行gradle build时,不会在war文件中创建dom4j.jar。现在我可以运行我的部署并在Wildfly 8.2上成功运行我的项目而没有任何错误。但真正的问题从这里开始。

我的项目中的一个功能是,它会将file.xlsm复制到anotherfile.xlsm,我在这里使用像Apache Poi这样的jar。在这里,Apache Poi试图在文件处理期间访问dom4j.jar中的方法,导致以下错误

18:40:13,261 ERROR [io.undertow.request] (default task-29) UT005023: Exception handling request to /app/parentPath/myAction: org.springframework.web.util.NestedSe
rvletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
        at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287) [spring-webmvc-4.1.4.RELEASE.jar:4.1.4
.RELEASE]

如何在我的类路径中永久使用dom4j.jar?我搜索了很多问题,他们中的大多数都建议从classpath中删除dom4j。我通过从类路径中删除它来成功运行我的程序,但它在excel文件处理期间导致上述错误。浪费了一天多的时间.. !!是否可以在我的类路径中包含dom4j.jar?

更新:

我在MANIFEST.MF文件中做了一个小技巧。 我打开了 mywar.war> META-INF> MANIFEST.MF

并补充说     依赖关系:org.dom4j export 在文件的末尾并保存它。因此,如果我部署我的war文件,我成功运行它没有任何错误。

有人可以解释我在src /文件中添加这种属性的位置,以便在gradle构建后自动将其添加到MANIFEST.MF中。

2 个答案:

答案 0 :(得分:6)

当你在战争中包含一个与野生飞行器不同的hibernate lib时,通常会发生wildfly上的这个异常,因为你正在部署到wildfly它已经包含了hibernate,所以你可以像gradle中提供的那样设置你的生活,也就是在编译提供和部署时没有输出依赖。 如果你仍然有同样的错误尝试声明对清单的hibernate依赖,但保持lib提供它应该工作正常。

答案 1 :(得分:0)

我遇到了同样的问题,我知道这个问题多么令人沮丧。我能够解决这个问题。看我的answer here。希望这个帮助