JAXB 2.x: Как демаршалировать XML, не зная целевой класс?

Если есть способ, как это сделать, я хотел бы знать самый элегантный. Вот вопрос: - Предположим, у вас есть абстрактный класс Z - У вас есть два класса, унаследованных от Z: с именами A и B.

Вы маршалируете любой экземпляр (A или B) следующим образом:

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

В полученном XML вы видите, какой это был экземпляр (A или B).

Теперь, как вы демаршалируете

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

Я получаю UnmarshalException с сообщением

 «Описание исключения: дескриптор с корневым элементом по умолчанию {} <корневой тег, например, A или B> не найден в проекте]
и ни разу не удалили? 

PS. Я знаю, что там есть дублированный код .... скоро он будет убран :)

11
задан Darren Young 1 April 2011 в 12:25
поделиться