簡體   English   中英

無法使用生成的JAXB類解析XML文件

[英]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

您將錯過netconfiguration元素。

我不知道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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM