Используйте библиотеку docx4j с jboss 7

Я пытаюсь создать pptx, используя библиотеку pptx4j. Я мог успешно сгенерировать pptx. Затем я применил код к огромному проекту, работающему на сервере jboss 7. Проект успешно развернут на сервере. Но когда я пытаюсь запустить приложение, оно дает следующее исключение.

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

Это исключение возникает для следующей строки в коде.

PresentationMLPackage presentationMLPackage = PresentationMLPackage
                .createPackage(); 

Есть ли специальный способ запустить библиотеку docx4j на сервере jboss 7. Я искал больше в Интернете, но я не мог найти решение.


person KittyKotte    schedule 01.07.2014    source источник
comment
Вы действительно искали в Интернете? На этом же форуме есть разные вопросы по JBoss и docx4j. Посмотрите, поможет ли этот поток: stackoverflow .com/questions/16204635/ Для этого также существует форум с инструкциями по настройке JBoss 7: docx4java.org/forums/jboss-f29/jboss-7-config-t1678.html   -  person Ben    schedule 01.07.2014
comment
Я перешел по ссылке stackoverflow.com/questions/16204635/. Но там только одно решение. Необходимо использовать версию jboss EAP 6.2. Я хочу работать с версией jboss 7. docx4java.org/forums/jboss-f29/jboss-7-config-t1678.html ... В этой ссылке также нет решения. Там только о проблеме.   -  person KittyKotte    schedule 01.07.2014
comment
Использование версии EAP 6.2 — это всего лишь один ответ. Насколько я понимаю, вы используете JBoss 7.x — это та же версия, что и в этой ветке. В любом случае, все сводится к тому, как работает новая загрузка классов в JBoss, и об этом есть много информации в ветке docx4j, на которую я ссылаюсь.   -  person Ben    schedule 01.07.2014
comment
(Вы говорите, что в этой ссылке нет решения. Есть).   -  person Ben    schedule 01.07.2014


Ответы (1)


JBoss AS 7 представил концепцию модулей (пакетов), которая радикально изменила способ загрузки классов. Вам следует ознакомиться с этим понятием:

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

jboss-deployment-structure.xml — это специфичный для JBoss дескриптор развертывания, который можно использовать для детального управления загрузкой классов. Он должен быть размещен в развертывании верхнего уровня, в META-INF (или 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>
person Mathieu Fortin    schedule 01.07.2014