jaxb:意外元素(uri:"",local:" head") - 位没有" head"元素

时间:2017-02-26 21:42:39

标签: java xml xsd jaxb

我得到一个"意想不到的元素"使用NIST CPE CPE 2.3 XML Schema Definition时使用enter image description here时出错。

返回带有此错误的JAXBException:

unexpected element (uri:"", local:"head"). Expected elements are <{http://cpe.mitre.org/dictionary/2.0}cpe-item>,<{http://cpe.mitre.org/dictionary/2.0}cpe-list>
  • 我的问题是:这个错误意味着什么?
  • 是否有任何修理提示?

注意:

  • 我使用右键单击&gt;通过Eclipse Neon创建了JAXB。仅通过严格验证生成
  • 没有名为&#34; head&#34; (或#34; Head&#34;)在XSD,JaxB或XML
  • JAXB生成没有为CPE XSD创建任何@XmlDocumentRoot注释 - 我认为因为CPE XSD使用xpath。

Unmarshalling Code非常简单:

        URL url = new URL("http://static.nvd.nist.gov/feeds/xml/cpe/dictionary/official-cpe-dictionary_v2.3.xml");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        InputStream plainXMLCPE = connection.getInputStream();

        JAXBContext jaxbContext  = JAXBContext.newInstance(ListType.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();           
        JAXBElement<ListType> cpeList = (JAXBElement<ListType>) jaxbUnmarshaller.unmarshal(plainXMLCPE);
        ListType thelist = cpeList.getValue();

与类似问题不同;我不认为这是一个带有元素名称的大写/小写问题,因为元素名称&#34; head&#34;根本不会出现在任何地方。我不完全理解为什么uri被标记为&#34;&#34;在错误消息中。

我试图手动将@XmlRootElement注释添加到JaxB创建的类中以使其无效。它自动创建了一个具有正确名称空间的package-info.java。

1 个答案:

答案 0 :(得分:1)

这里似乎有两个问题:

  1. 这个<head>元素来自哪里?和
  2. 为什么JAXB之前没有发现此错误?
  3. 1.的答案是您可能从浏览器中错误地保存了XSD,导致额外的HTML <head/>标记被写入您认为是XSD文件的内容。

    在Firefox中,例如,当您执行文件 - &gt;将页面另存为时,您将进入下拉菜单&#34;另存为类型&#34;并选择网页,仅限XML (这将保存没有额外的HTML),而不是网页完成(这类似于你必须做的)。

    如果您打开XSD,您认为自己正在保存并仔细查看,您会在本地副本中看到标记。

    这样很容易修复。我知道IE有类似的选择,并且最近没有检查过Chrome。

    至于2.但是,我不确定你是如何成功完成JAXB生成的。我只是尝试重新创建它几次(使用EclipseLink MOXy)但是我无法在那里使用<head/>标记。

    如果您回答如何从Eclipse配置JAXB,我可以帮助我尝试更新我的答案。