当前位置: 首页 > 知识库问答 >
问题:

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

缪阎宝
2023-03-14

在使用标准CPE2.3XML模式定义处理NIST CPE时,我收到一个“意外元素”错误。

返回包含此错误的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>
  • 我的问题是:这个错误意味着什么?
  • 有什么解决方法吗?

备注:

    null
        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();

不同于类似的问题;我不认为这是一个元素名的大小写问题,因为元素名“head”根本没有出现在任何地方。我不完全理解为什么在错误消息中将uri标记为“”。

我尝试手动将@XMLRootElement注释添加到JaxB创建的类中,但没有效果。它自动创建了一个具有正确名称空间的package-info.java。

共有1个答案

陆洲
2023-03-14

这里似乎有两个问题:

  1. 这个元素来自哪里?和
  2. 为什么JAXB不能更早捕获此错误?

%1的答案。您可能错误地从浏览器中保存了XSD,导致额外的HTML标记被写入您认为是在说的XSD文件中。

例如,在Firefox中,当您执行File->save Page操作时,您将下拉到“save As Type”并选择Web Page,Only XML(它将保存而不需要额外的HTML),而不是Web Page Complete(这与您必须完成的操作类似)。

如果打开您认为要保存的XSD并仔细查看,您将在本地副本中看到一个标记。

所以很容易修复。我知道IE有一个类似的选项,最近没有检查Chrome。

至于2.,不过,我不确定您是如何成功地通过JAXB生成的。我只是尝试重新创建了它几次(使用EclipseLink MOXy),但我无法使用其中的标记。

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

 类似资料: