JAXB 2.x: Comment unmarshal XML sans connaître la classe cible?

Si il y a une façon de le faire, j'aimerais savoir le plus élégant.
Voici la question:
- Supposons que vous avez une classe abstraite Z
- Vous avez deux classes héritées de Z: nommés A et B.

Vous, maréchal de toute instance (A ou B) comme ceci:

JAXBContext context = JAXBContext.newInstance(Z.class);
Marshaller m = context.createMarshaller();
m.marshal(jaxbObject, ...an outputstream...);

Dans le XML résultant de voir ce genre d'instance, il a été (A ou B).

Maintenant, comment voulez-vous unmarshall comme

JAXBContext jc = JAXBContext.newInstance(Z.class);
Unmarshaller u = jc.createUnmarshaller();
u.unmarshal(...an inputstream...)

- Je obtenir une UnmarshalException disant

"Exception Description: A descriptor with default root element {<my namespace>}<the root tag, e.g. A or B> was not found in the project]

javax.xml.bind.UnmarshalException"

Alors, comment faites-vous unmarshalling de sorte que vous obtenez une instance de Z et ensuite vous pouvez tester APRÈS unmarshalling, ce que c'est? par exemple, z instanceof A... z B instanceof puis quelque chose d'autre... etc.

Merci pour toutes les idées ou les solutions.

Je suis en utilisant JRE1.6 avec MOXy que JAXB Impl.

OriginalL'auteur basZero | 2011-04-01