Если есть способ, как это сделать, я бы хотел узнать самый элегантный.Вот вопрос: - Давайте предположим, что у вас есть абстрактный класс Z - У вас есть два класса, унаследованных от Z: с именами A и B.
Вы маршалируете любой экземпляр (A или B) следующим образом:
JAXBContext context = JAXBContext.newInstance(Z.class);
Marshaller m = context.createMarshaller();
m.marshal(jaxbObject, ...an outputstream...);
В полученном XML вы видите, какой это был экземпляр (A или B).
Теперь, как вы можете unmarshall, как
JAXBContext jc = JAXBContext.newInstance(Z.class);
Unmarshaller u = jc.createUnmarshaller();
u.unmarshal(...an inputstream...)
Я получаю исключение UnmarshalException
"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 "
Итак, как вы делаете демаршаллинг, чтобы получить экземпляр Z, а затем вы можете протестировать ПОСЛЕ демаршаллингачто это такое? например, z instanceof A затем ... z instanceof B, затем что-то еще ... etc.
Спасибо за любые идеи или решения.
Я использую JRE1.6 сМОКСИ как JAXB Impl.