我在使用jaxb2-maven-plugin(1.5)解组XML时遇到问题。基本上我在我的XML文档中有一个类型为B的元素A,它是一个基类域类,类A.类型B是一个扩展A的域类。现在,我可以看到带有xsi的元素A的XML :类型= “B”。但是当我解组它时,它仍然返回一个类型为A的Java对象。我该如何解决这个问题呢?我需要能够获得类型B的对象。只要XML具有符号xsi:type,它应该能够解组它,正确。或者我还需要XMLAdapters等吗?
非常感谢。
答案 0 :(得分:2)
有几件事需要检查:
JAXBContext
是否了解B
课程?您可以在用于创建JAXBContext
的类中添加,或在@XmlSeeAlso({B.class})
类中添加A
。B
类B
对应?默认情况下,它将是b
。您可以使用@XmlType
注释指定名称。<强> A 强>
package forum13712986;
import javax.xml.bind.annotation.XmlSeeAlso;
@XmlSeeAlso({B.class})
public class A {
}
<强>乙强>
package forum13712986;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="B") // Default name is "b"
public class B extends A {
}
<强>演示强>
package forum13712986;
import java.io.StringReader;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
String xml = "<A xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='B'/>";
StreamSource source = new StreamSource(new StringReader(xml));
JAXBElement<A> jaxbElement = unmarshaller.unmarshal(source, A.class);
System.out.println(jaxbElement.getValue().getClass());
}
}
<强>输出强>
class forum13712986.B