[英]Can't parse XML files with generated JAXB classes
我試圖從生成JAXB綁定這個根據XSD文件本教程 。 首先,我注意到有一些依賴關系,但是我設法使它們脫離相同的地址。 下載它們后,我跑了
xjc net_file.xsd
這確實生成了一些Java代碼,但是與教程中的文件不同,這些文件看起來像“ ... Type.java”。 我覺得這很不方便,但我可以接受。 之后,我嘗試解析給定的示例文件:
File file = new File("quickstart.net.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(NetType.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
NetType net = (NetType) jaxbUnmarshaller.unmarshal(file);
但是,出現以下異常:
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"net"). Expected elements are (none)
有人知道我在做什么錯嗎?
我認為您的XML文件由兩個XSD定義。 看這里:
xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/netconvertConfiguration.xsd"
和xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd
您將錯過net
或configuration
元素。
我不知道JAXB如何支持部分XSD。 您確定您正確地遵循了本教程嗎? 您應該能夠將這兩個xsd文件合並為一個(?)。
好吧,我發現了問題。 看來您實際上需要使用生成的ObjectFactory
。 我修改了這樣的代碼:
File file = new File("quickstart.net.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<NetType> netElement = (JAXBElement<NetType>) jaxbUnmarshaller.unmarshal(file);
現在一切正常。 我猜想原因是ObjectFactory
有一個帶注釋的生成器方法:
/**
* Create an instance of {@link JAXBElement }{@code <}{@link NetType }{@code >}}
*
*/
@XmlElementDecl(namespace = "", name = "net")
public JAXBElement<NetType> createNet(NetType value) {
return new JAXBElement<NetType>(_Net_QNAME, NetType.class, null, value);
}
恕我直言,這確實是過度工程,但無論如何
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.