¡Hola a todos! Si estás trabajando con servicios web en Spring y te has topado con el error com.sun.xml.bind.v2.runtime.IllegalAnnotationsException al desplegar en Tomcat, sé lo frustrante que puede ser. A primera vista, el mensaje de error puede no ser muy claro, especialmente cuando el método parece estar bien.
Hace poco me encontré con este mismo problema, y tras una inspección detallada, descubrí que la causa era muy simple pero difícil de notar a primera vista. La clave estaba en la declaración de las variables de la clase de la excepción.
El problema: Visibilidad de las propiedades
El error IllegalAnnotationsException con el mensaje Class has two properties of the same name ocurre cuando el motor de JAXB (Java Architecture for XML Binding) que usa CXF intenta serializar una clase y encuentra dos "propiedades" con el mismo nombre.
Esto puede suceder si declaras una variable de clase con visibilidad public y, además, tienes métodos getter y setter para esa misma variable. Por ejemplo:
// Código con error
public class MiClase {
public String miPropiedad; // Visibilidad pública
public String getMiPropiedad() {
return miPropiedad;
}
public void setMiPropiedad(String miPropiedad) {
this.miPropiedad = miPropiedad;
}
}
JAXB ve la variable public miPropiedad como una propiedad y también ve los métodos getMiPropiedad() y setMiPropiedad() como una segunda propiedad (basada en la convención de get/set), lo que resulta en un conflicto.
La solución: Cambiar la visibilidad
La solución es simple: cambiar la visibilidad de la variable de clase de public a private.
// Código corregido
public class MiClase {
private String miPropiedad; // Visibilidad privada
public String getMiPropiedad() {
return miPropiedad;
}
public void setMiPropiedad(String miPropiedad) {
this.miPropiedad = miPropiedad;
}
}
Al hacer esto, la variable miPropiedad ya no es accesible directamente y JAXB solo detecta la propiedad a través de los métodos getter y setter. Esto resuelve el conflicto y permite que la serialización a XML se realice sin problemas.
Espero que esta solución te ahorre tiempo y frustración en tus proyectos. A veces, la respuesta está en los pequeños detalles.
¿Qué otros errores de configuración te han sorprendido en el desarrollo de servicios web? ¡Déjanos un comentario y comparte tu experiencia!
Comentarios
Publicar un comentario