【问题标题】:Use docx4j library with jboss 7在 jboss 7 中使用 docx4j 库
【发布时间】:2014-07-01 12:03:30
【问题描述】:

我尝试使用 pptx4j 库生成 pptx。我可以成功生成一个 pptx。然后我将代码应用到一个运行在 jboss 7 服务器上的大型项目中。项目已成功部署在服务器上。但是当我尝试运行应用程序时,它会出现以下异常。

java.lang.NoClassDefFoundError: com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper

代码中的以下行发生了该异常。

PresentationMLPackage presentationMLPackage = PresentationMLPackage
                .createPackage(); 

在 jboss 7 服务器上运行 docx4j 库是否有特殊方法。我在互联网上进行了更多搜索,但找不到解决方案。

【问题讨论】:

  • 你真的“搜索过互联网”吗?在这个论坛上有很多关于 JBoss 和 docx4j 的问题。看看这个帖子是否有帮助:stackoverflow.com/questions/16204635/… 还有一个论坛,完整的 JBoss 7 配置说明:docx4java.org/forums/jboss-f29/jboss-7-config-t1678.html
  • 我关注了 stackoverflow.com/questions/16204635/ 链接。但那里只有一种解决方案。必须使用 jboss EAP 6.2 版本。我想使用 jboss 7 版本。 docx4java.org/forums/jboss-f29/jboss-7-config-t1678.html ...在该链接中,也没有解决方案。只是关于这个问题。
  • 使用 EAP 6.2 版本只是一个的答案。我了解您使用的是 JBoss 7.x——这与该线程中的版本相同。无论哪种方式,这都取决于新的类加载在 JBoss 中的工作方式,并且在我链接到的 docx4j 线程中有很多关于此的内容。
  • (你说那个链接里没有解决方案。有)。

标签: java jboss7.x docx4j


【解决方案1】:

JBoss AS 7 引入了模块(包)的概念,它彻底改变了类的加载方式。你应该熟悉这个概念:

https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7

jboss-deployment-structure.xml 是 JBoss 特定的部署描述符,可用于以细粒度方式控制类加载。它应该放在顶层部署中,在 META-INF(或 WEB-INF 用于 Web 部署)中。它可以执行以下操作:

  • 防止添加自动依赖项
  • 添加其他依赖项
  • 定义附加模块
  • 更改 EAR 部署隔离类加载行为
  • 向模块添加额外的资源根

当您在 JBoss AS 7 中获得 NoClassDefFoundError 时,您可以打赌您在某处缺少依赖项。至于你的具体情况,你需要添加对模块com.sun.xml.bind的依赖。

docx4j 甚至有一个页面:

http://www.docx4java.org/forums/jboss-f29/jboss-7-config-t1678.html

要让 docx4j 在你的 WAR 中工作,你只需要包含 WEB-INF/jboss-deployment-structure.xml 包含:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <dependencies>
            <module name="com.sun.xml.bind" />
       </dependencies>
    </deployment>
</jboss-deployment-structure>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多