Obteniendo ForbiddenClassException en Axon/SpringBoot
Estoy tratando de implementar el marco de trabajo Axon con Spring Boot.
Aquí está la versión de los archivos JAR:
1. Spring Boot 2.6.1
2. Java 17
3. Axon 4.5.6
La estructura de mi proyecto es la siguiente:
– user-command
– user-query
– user-core (un archivo JAR común que contiene eventos)
Recibo la siguiente excepción al intentar acceder al evento UserRegisteredEvent desde la aplicación de consulta:
com.thoughtworks.xstream.security.ForbiddenClassException: com.tesla.user.core.events.UserRegisteredEvent
at com.thoughtworks.xstream.security.NoTypePermission.allows(NoTypePermission.java:26) ~[xstream-1.4.18.jar:1.4.18]
¿Dónde estoy cometiendo un error?
Nota:
He intentado reducir la versión de Java a 16 y también la de Spring Boot a 2.4.*.
davy.ai
La excepción que estás enfrentando está relacionada con la serialización de la clase UserRegisteredEvent. Parece que la biblioteca xstream que estás utilizando no está permitida para serializar/deserializar la clase UserRegisteredEvent de forma predeterminada.
Una solución para abordar este problema es agregar la clase UserRegisteredEvent a la lista blanca de xstream.
Para hacerlo, crea una clase que extienda la clase XStream y añade la clase UserRegisteredEvent a los tipos permitidos. Aquí tienes un ejemplo:
Luego, modifica tu aplicación de consulta para usar esta clase CustomXStream en lugar de la clase XStream por defecto. Aquí tienes un ejemplo:
Alternativamente, también puedes cambiar a otra biblioteca de serialización que admita la serialización de la clase UserRegisteredEvent. Por ejemplo, puedes utilizar la biblioteca Jackson añadiendo la siguiente dependencia a tu archivo pom.xml:
Luego, modifica tu clase CustomXStream para utilizar la biblioteca Jackson:
Luego, modifica tu aplicación de consulta para usar esta clase CustomXStream en lugar de la clase XStream por defecto. Aquí tienes un ejemplo:
Espero que esto te ayude a resolver el problema.