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

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 :)

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...

Home Assistant Lovelace em Modo Kiosk por Defeito

Olá Malta, recentemente implementei o maravilhoso tema Lovelace no meu Home Assistant, no entanto  ao colocar o mesmo nos tablets que tenho nas paredes, verifiquei que aquela barra azul superior ocupa uma grande parte do écran, tornando a experiência de utilização muito má. Bom investiguei um pouco e descobri que existe um script que permite desativar as barras chamado. KIOSK Com o KIOK passamos disto...   Para isto... O problema é que para ativar o modo de KIOSK temos de colocar no URL manualmente lovelace/0?kiosk&show_tabs, para alem de ser incomodo estar sempre a colocar aquilo no URL final não funciona caso seja criada uma APP Android Via Browser. Meti mãos à obra e arranjei uma solução definitiva e simples. Basta editarmos o Script do Lovelace e adicionar-mos lá os parametros no URL <script>     if (window.location.pathname === "/states") {         window.location.href = "/lovelace/...