Avançar para o conteúdo principal

Docx4j no Wildfly

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

<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

Comentários

Enviar um comentário

Mensagens populares deste blogue

3 Formas de configurar o Wi-Fi no ESP8266

3 Formas de  configurar o Wi-Fi no ESP8266 O nosso famoso ESP8266 veio para ficar, cada vez mais este microcontrolador é utilizado para desenvolver dispositivos fantásticos, é verdade que o ESP pode ser utilizado como um simples MCU , mas é a sua capacidade de se ligar a uma rede Wi-Fi, faz dele a escolha perfeita no que toca dipositivos IoT . Este artigo tem foco em três diferentes soluções que permitem programar o ESP de forma a que este se consiga ligar a uma rede Wi-Fi. É sabido que da primeira vez que o ESP é energizado este tem de conhecer ou vir a conhecer o SSID e a Password configurada no Access Point ao qual o queremos conectar de forma a fazer para da rede e ter acesso à Internet se assim for necessário. Vamos então ver como implementar as três soluções, analisar cada uma delas e ponderar os prós e contras e cada uma delas. Passemos ao caso mais simples, ao qual denomino de “Hard Coded” , esta é a forma mais utilizada por quem começa a util...

Instalação do SQLPLUS da ORACLE em LINUX

Bom dia a todos Hoje vou explicar como podemos instalar o SQLPLUS da Oracle em sistemas Linux que utilizem gestão de pacotes RPM, entre eles CENTOS, FEDORA etc.. O SQLPLUS é uma excelente ferramenta de administração de SGDB da Oracle e apresenta-se sob o formato de linha de comandos o que permite aos Administradores de Base de Dados um maior poder sobre o SGDB. Antes de mais é necessário ter uma conta Oracle, esta pode ser feita atraves de um registo no site e é totalmente gratuito. Após termos conta devemos ir à secção de Download -> Databases -> Oracle Instant Client URL:   http://www.oracle.com/technetwork/indexes/downloads/index.html É apresentada uma lista sistemas operativos suportados e no nosso caso vamos escolher    Instant Client for Linux x86-64   para versões 64 Bits Ao escolhermos o Sistema Operativo a Oracle mostra-nos todas aplicações de Cliente para as diversas versões de Base de dados. A ultima versão é a 12 no entanto de...

CNC 2418 Autolevel PINS

Boas, se têm uma CNC 2418 então vão querer ter Autolevel :) Aqui ficam os pinos :) Thanks Nuno Miguel :)