我想将一个元素解组为一个Class属性,Type为Object,以保持它的通用性。
我尝试构建类并编组成xml,将其解组,结果很好。 但是当我尝试使用正常生成的Xml-Document(尽管它具有相同的结构)时,结果Class Object Property的值为null。
这是我的测试结构:
@XmlRootElement
public class TestStructure {
private Object test;
public Object getTest() {
return test;
}
public void setTest(Object test) {
this.test = test;
}
}
我尝试对此进行编组,并获取 xml-document :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<testStructure>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">foo</test>
</testStructure>
但是,如果我尝试通过Domsource任意构建此结构来获取相同的 Xml文档:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root element
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("testStructure");
doc.appendChild(rootElement);
Element test = doc.createElement("test");
test.appendChild(doc.createTextNode("foo"));
test.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
test.setAttribute("xsi:type", "xs:string");
test.setAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
rootElement.appendChild(test);
和 Unmarshal 文档:
JAXBContext context2 = JAXBContext.newInstance(TestStructure.class);
Unmarshaller m2 = context2.createUnmarshaller();
TestStructure testobject2 =
( TestStructure ) m2.unmarshal(doc);
System.out.println(testobject2.getTest());
该属性似乎为“null”。
那么,出了什么问题?
答案 0 :(得分:1)
您只需修改元素属性:
Element test = doc.createElement("test");
test.appendChild(doc.createTextNode("foo"));
test.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:type", "xs:string");
test.setAttribute("xmlns:xs", "http://www.w3.org/2001/XMLSchema");