【问题标题】:Can't parse XML files with generated JAXB classes无法使用生成的 JAXB 类解析 XML 文件
【发布时间】:2016-05-15 09:15:07
【问题描述】:

我正在尝试根据this tutorialthis xsd 文件生成 JAXB 绑定。首先,我注意到存在一些依赖关系,但我设法将它们从同一个地址中取出。下载后我跑了

xjc net_file.xsd

这确实生成了一些 java 代码,但与教程中的不同,文件看起来像“...Type.java”。我觉得这很不方便,但我可以忍受。 之后我尝试解析given 示例文件:

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)

有谁知道我做错了什么?

【问题讨论】:

  • 看看这个,可能和你的问题类似similar_Question
  • "net" 应该是您的根元素,例如 XmlRootElement(name="net")。你能展示一下 NetType 类吗?

标签: java xsd jaxb xjc


【解决方案1】:

我认为您的 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 文件合并为一个 (?)。

【讨论】:

    【解决方案2】:

    嗯,我发现了问题。看来您实际上需要使用生成的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);
    }
    

    恕我直言,这真的是过度设计,但无论如何:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多