Java 如何在jaxb中检测意外元素

Java 如何在jaxb中检测意外元素,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我使用JAXB 2.2.7从XML文件中获取数据,问题是我需要检查XML文件中是否有一些意外的元素,但JAXB并不关心,而且工作正常,没有任何错误 例如: <classe> <detail> <knowElementFromXSD>value</knowElementFromXSD> <unknowElementFromXSD>OtherValue</unknowElementFrom

我使用JAXB 2.2.7从XML文件中获取数据,问题是我需要检查XML文件中是否有一些意外的元素,但JAXB并不关心,而且工作正常,没有任何错误

例如:

    <classe> 
  <detail>
        <knowElementFromXSD>value</knowElementFromXSD>
        <unknowElementFromXSD>OtherValue</unknowElementFromXSD>
  </detail>
</classe>

价值
其他价值
例如,我需要JAXB为此XML文件中的抛出一个错误,因为在我的XSD中没有定义


如果有人有想法,我在互联网上找不到任何解决方案。

有几种不同的方法来完成您的用例:

选项#1-
ValidationEventHandler

您可以在解组器上设置一个
ValidationEventHandler
,以便收到诸如意外元素之类的通知。默认情况下,JAXB(JSR-222)实现只会忽略未映射的元素

选项#2-模式验证

如果在
Unmarshaller
上设置
javax.xml.validation.Schema
的实例,则xml输入将在其解组时进行验证


您好,我忘了说我已经使用了与您的链接完全相同的ValidationEventHandler。我看不到验证处理程序中添加了什么来检测解组中的意外元素。在选项#1中,您说JAXB实现默认情况下只忽略未映射的元素。那么,如何设置验证处理程序来检测这些未映射的元素?@Wifsimster-将向
ValidationEventHandler
传递严重性较低的
ValidationEvent
。默认的
ValdatiionEventHandler
不会引发严重性较低的异常。您可以在
Unmarshaller
上设置自己的“ValdationEventHandler”实现来更改此行为。Thk有关信息,请务必帮助我!