【发布时间】:2011-07-27 15:53:03
【问题描述】:
如果有办法,如何做到这一点,我想知道最优雅的一种。 这是问题: - 假设你有一个抽象类 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 说
"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 然后其他...等等。
感谢您提供任何想法或解决方案。
我使用 JRE1.6 和 MOXy 作为 JAXB Impl。
【问题讨论】: