martes, 29 de septiembre de 2020

Conflicto de librerias de Hibernate Envers: java.lang.NoSuchMethodError: org.codehaus.stax2.ri.EmptyIterator.getInstance()

Problema (ir al apartado de solución)

El problema viene que hay un conflicto de dependencias de la stax2-api pues se uilizan distintas versiones.

El sistema de compilación de Maven parece ser que elimina las versiones mas viejas, por tanto cualquier referencia a métodos que se encuentren excluisivamente en versiones viejas, dan error de "runtime" que en este caso indica que no encuentra el método.

Para solucionarlo hacemos uso de <scope>runtime</scope> en cada una de las dependencias antigua que queremos.

Su suso está bien explicado en Baeldung y en mi caso tenía que suministrar las versiones 4.2.1 y la 3.1.4

Quedando en el pom.xml este fragmento



<dependency>
  <groupId>org.codehaus.woodstox</groupId>
  <artifactId>stax2-api</artifactId>
  <version>4.2.1</version>
  <scope>runtime</scope>
</dependency>
		 
<dependency>
  <groupId>org.codehaus.woodstox</groupId>
  <artifactId>stax2-api</artifactId>
  <version>3.1.4</version>
  <scope>runtime</scope>
</dependency>

Con esta adición de dependencias parece ser que se ha solucionado si se ejecuta como Java applicaion pero no en modo web

Por tanto para ejecutar una clase que abra una sesion de JPA Hibernate que haga uso de Hibernate Envers con la anotiación @Audited en una Entidad como la clase FirstControlLoad, hay que añadir este código al pom-xml, pero hay que quitarlo para generar el war!!!

Solución buena

20/01/2022. Se puede solucionar lo de Hibernate Envers utilizando la nueva implementación de jakarta que no utiliza el stax2-api


implementation 'org.hibernate:hibernate-core-jakarta:5.6.3.Final'
implementation 'org.hibernate:hibernate-envers-jakarta:5.6.3.Final'
//implementation "org.hibernate:hibernate-testing-jakarta:5.6.3.Final'
implementation "org.hibernate:hibernate-validator:7.0.2.Final" 



No hay comentarios :

Publicar un comentario