Estoy trabajando en un servicio web utilizando spring-mvc y Jaxb2Marshaller.Uso de Jaxb2Marshaller con varias clases con el mismo nombre de @XmlRootElement
Tengo dos clases, tanto anotado con el mismo nombre @XmlRootElement
@XmlRootElement(name="request")
class Foo extends AstractRequest {
}
@XmlRootElement(name="request")
class Bar extends AbstractRequest {
}
Las tres clases (AbstractRequest, Foo, Bar) están incluidos en la lista classesToBeBound en el mismo orden
Ahora la solicitud que usa Bar funciona bien. Pero el que utiliza Foo emite una excepción ClassCastException durante unmarshalling con el mensaje Bar cannot be cast to Foo
El código del controlador es esto,
Source source = new StreamSource(new StringReader(body));
Foo request = (Foo) this.jaxb2Marshaller.unmarshal(source);
supongo
esto está sucediendo porque Bar es una especie de anular Foo, ya que está escrito después Foo en la lista de clases que se enlazará en el archivo spring-servlet.xml
Sin embargo, también tengo varias clases anotadas con @XmlRootElement(name="response")
y la respuesta no da ningún problema.
¿Hay alguna manera de especificar la clase que utilizará jaxb2Marshaller para desasignar?
No, no hay forma de hacerlo. Necesita refactorizar su diseño para mantenerlos separados el uno del otro. – skaffman