Olá pessoal, se estão a tentar usar Docx4j numa aplicação Java EE que esteja a correr num servidor aplicacional Wildfly, provavelmente devem estar a ver um monte de linhas vermelhas com indicação de alguns erros......
org.docx4j.openpackaging.exceptions.Docx4JException: Error marshalling Content_Types
Caused by: java.lang.NullPointerException
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.jaxb.NamespacePrefixMapperUtils.setProperty(NamespacePrefixMapperUtils.java:161)
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.openpackaging.contenttype.ContentTypeManager.marshal(ContentTypeManager.java:828)
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.openpackaging.io3.stores.ZipPartStore.saveContentTypes(ZipPartStore.java:213)
18:23:11,526 ERROR [stderr] (default task-4) ... 116 more
18:23:11,534 ERROR [stderr] (default task-4) org.docx4j.openpackaging.exceptions.Docx4JException: Error marshalling Content_Types
O motivo de isto acontecer deve-se ao facto de o Java EE 7 implementar uma versão diferente do JAXB, que é responsável pelo binding que faz com que algumas classes não sejam carregados para a aplicação usar.
Mas não desesperam porque é muito simples a solução, difícil mesmo foi encontra-la heheheh.
Para que não percam o tempo que perdi, deixo aqui como resolver.
Dentro da para webapp/WEB-INF do vosso projeto devem criar/editar o ficheiro
jboss-deployment-structure.xml
No seu conteúdo é só colocar o seguinte
Espero ter ajudado,
Esta solução foi testada com a versão (pom.xml)
Deve ser colocado na pasta META- INF (ou WEB -INF numa implementação web ).
Permite:
Prevenir que dependências automáticas sejam adicionados
Adicionar dependências adicionais
Definir módulos adicionais
Mudar o comportamento de uma implementação EAR isolando o carregamento de classes
Adicionar novas raízes de recursos adicionais a um módulo
org.docx4j.openpackaging.exceptions.Docx4JException: Error marshalling Content_Types
Caused by: java.lang.NullPointerException
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.jaxb.NamespacePrefixMapperUtils.setProperty(NamespacePrefixMapperUtils.java:161)
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.openpackaging.contenttype.ContentTypeManager.marshal(ContentTypeManager.java:828)
18:23:11,526 ERROR [stderr] (default task-4) at org.docx4j.openpackaging.io3.stores.ZipPartStore.saveContentTypes(ZipPartStore.java:213)
18:23:11,526 ERROR [stderr] (default task-4) ... 116 more
18:23:11,534 ERROR [stderr] (default task-4) org.docx4j.openpackaging.exceptions.Docx4JException: Error marshalling Content_Types
O motivo de isto acontecer deve-se ao facto de o Java EE 7 implementar uma versão diferente do JAXB, que é responsável pelo binding que faz com que algumas classes não sejam carregados para a aplicação usar.
Mas não desesperam porque é muito simples a solução, difícil mesmo foi encontra-la heheheh.
Para que não percam o tempo que perdi, deixo aqui como resolver.
Dentro da para webapp/WEB-INF do vosso projeto devem criar/editar o ficheiro
jboss-deployment-structure.xml
No seu conteúdo é só colocar o seguinte
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="com.sun.xml.bind"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
Caso já tenham este ficheiro com alguns módulos adicionados basta então adicionar a linha<module name="com.sun.xml.bind"/>
Espero ter ajudado,
Esta solução foi testada com a versão (pom.xml)
<!-- https://mvnrepository.com/artifact/org.docx4j/docx4j -->
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.3.1</version>
</dependency>
Curiosidade
O jboss-deployment-structure.xml é um descritor de implementação específico do JBoss que pode ser usado para controlar o carregamento de classes de uma forma fina/controlada.Deve ser colocado na pasta META- INF (ou WEB -INF numa implementação web ).
Permite:
Prevenir que dependências automáticas sejam adicionados
Adicionar dependências adicionais
Definir módulos adicionais
Mudar o comportamento de uma implementação EAR isolando o carregamento de classes
Adicionar novas raízes de recursos adicionais a um módulo
Helped
ResponderEliminar