Я пытаюсь создать pptx, используя библиотеку pptx4j. Я мог бы создать pptx успешно. Затем я применил код к огромному проекту, который запускается на сервере jboss 7. Проект успешно развертывается на сервере. Но когда я пытаюсь запустить приложение, оно дает следующее исключение.
java.lang.NoClassDefFoundError: com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper
Это исключение происходит для следующей строки в коде.
PresentationMLPackage presentationMLPackage = PresentationMLPackage
.createPackage();
Есть специальный способ запуска библиотеки docx4j на сервере jboss 7. Я искал больше в Интернете, но я не мог найти решение.
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>