Je travaille sur un service web utilisant spring-mvc et Jaxb2Marshaller.
J'ai deux classes, toutes deux annotées avec le même @XmlRootElement
nom
@XmlRootElement(name="request")
class Foo extends AstractRequest {
}
@XmlRootElement(name="request")
class Bar extends AbstractRequest {
}
Les trois classes (AbstractRequest, Foo, Bar) sont incluses dans la liste des classesToBeBound dans le même ordre
Maintenant la demande qui utilise Bar fonctionne bien. Mais celle qui utilise Foo lève une exception ClassCastException pendant le démarchage avec le message suivant Bar cannot be cast to Foo
Le code du contrôleur est le suivant,
Source source = new StreamSource(new StringReader(body));
Foo request = (Foo) this.jaxb2Marshaller.unmarshal(source);
Je suppose cela se produit parce que Bar a en quelque sorte priorité sur Foo puisqu'il est écrit après Foo dans la liste des classes à lier dans le fichier spring-servlet.xml.
Cependant, j'ai également de multiples classes annotées avec @XmlRootElement(name="response")
et la mise en commun de la réponse ne pose aucun problème.
Existe-t-il un moyen de spécifier la classe à utiliser par le jaxb2Marshaller pour le démarchage ?