将docx4j库与jboss 7一起使用

Kit*_*tte 1 java docx4j jboss7.x

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

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

代码中的后续行发生了该异常.

PresentationMLPackage presentationMLPackage = PresentationMLPackage
                .createPackage(); 
Run Code Online (Sandbox Code Playgroud)

是否有一种特殊的方式在jboss 7服务器上运行docx4j库.我在互联网上搜索更多,但我找不到解决方案.

Mat*_*tin 6

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

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

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

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

当你NoClassDefFoundError在JBoss AS 7中获得一个你可以打赌你在某个地方缺少依赖.至于您的具体情况,您需要添加对模块的依赖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>
Run Code Online (Sandbox Code Playgroud)