我試圖解組給定的XML生成的目標:JAXB解組與聲明的類型不填充數據
<FHcomment>
<TX>rewriting of file</TX>
<tool_id>toolA</tool_id>
<tool_vendor>Company</tool_vendor>
<tool_version>1.7.36.0</tool_version>
</FHcomment>
的模式已經被編譯JAXB類,在這裏看到:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"tx",
"toolId",
"toolVendor",
"toolVersion",
"userName",
"commonProperties",
"extensions"
})
@XmlRootElement(name = "FHcomment")
public class FHcomment {
@XmlElement(name = "TX", required = true)
protected TX tx;
@XmlElement(name = "tool_id", required = true)
protected BaseName toolId;
@XmlElement(name = "tool_vendor", required = true)
protected BaseName toolVendor;
@XmlElement(name = "tool_version", required = true)
protected BaseVersion toolVersion;
@XmlElement(name = "user_name")
protected BaseName userName;
@XmlElement(name = "common_properties")
protected CommonPropertiesType commonProperties;
protected ExtensionsType extensions;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
.....
/*
* GETTERS and SETTERS for the fields have been removed here
*/
.....
}
我的代碼來解組XML如下:
JAXBContext jc = JAXBContext.newInstance(FHcomment.class);
String s = "<FHcomment>....</Fhcomment>";
Unmarshaller unmarshaller = jc.createUnmarshaller();
XMLInputFactory fac = XMLInputFactory.newFactory();
XMLStreamReader xsr = fac.createXMLStreamReader(new StringReader(s));
JAXBElement<FHcomment> foo = unmarshaller.unmarshal(xsr, FHcomment.class);
FHcomment val = foo.getValue();
習題lem:生成的FHcomment對象不包含FHcomment的子元素。所有這些都不是理想的結果。
如何告訴JAXB將給定的XML完全解組爲對象?
編輯:添加ValidationHandler到Unmsarshaller後,我走近的問題:
意想不到的元素(URI: 「」,當地: 「TX」)。預期的元素是< {htp://www.example.com/mdf/v4} tool_id>,< {htp://www.example.com/mdf/v4} TX>,< {htp://www.www .example.com/mdf/v4} common_properties>,< {htp://www.example.com/mdf/v4} tool_version>,< {htp://www.example.com/mdf/v4} extensions>, < {htp://www.example.com/mdf/v4} tool_vendor>,< {htp://www.example.com/mdf/v4} user_name>
意外元素(uri: 「」,local:「tool_id」)。預計元素....
原來JAXB不喜歡的事實,提供的XML不包含命名空間信息..所以我怎麼告訴解組忽略命名空間?
EDIT2:
一些調查研究後,我無法找到一個方法來欺騙JAXB到沒有命名空間的驗證工作。我使用了教程http://cooljavablogs.blogspot.de/2008/08/how-to-instruct-jaxb-to-ignore.html來規避我的問題。不是一個很好的解決方案,但手頭最好...
這是不是遞歸的,只是一個簡單的JAXB解組。它會自動執行,所以其他問題就是這個問題。 (xml vs. Java類) –
將主題修改爲更具體/更正 – Slacky