xsd:在Java类中是唯一的

xsd:在Java类中是唯一的,java,xml,xsd,Java,Xml,Xsd,我的模式中的xsd:unique约束为少数元素定义主键和外键 尽管模式没有抛出任何错误 生成java类时,未添加xsd:unique JAXB不强制执行验证规则 要强制执行验证规则,需要在解析XML时指定XSD模式 假设您要求解组器为您解析XML,例如,您没有解组DOM节点,您可以这样做: SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema sche

我的模式中的xsd:unique约束为少数元素定义主键和外键

尽管模式没有抛出任何错误

生成java类时,未添加xsd:unique


JAXB不强制执行验证规则

要强制执行验证规则,需要在解析XML时指定XSD模式

假设您要求解组器为您解析XML,例如,您没有解组DOM节点,您可以这样做:

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile); // file or URL

JAXBContext jaxbContext = JAXBContext.newInstance();
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(handler); // To specify how validation errors should be handled
Object obj = unmarshaller.unmarshal(source);
以下的javadoc中对此进行了描述:

验证和良好形式

客户端应用程序可以通过setSchemajavax.xml.validation.Schema API启用或禁用JAXP 1.3验证机制。成熟的客户机可以指定自己的验证SAX2.0兼容解析器,并使用API绕过JAXP 1.3验证机制

由于在JAXB 2.0中定义了对无效XML内容的解组,因此解组器默认验证事件处理程序比JAXB 1.0中的处理程序更为宽松。当JAXB 1.0绑定编译器生成的模式派生代码注册到时,默认的unmarshal验证处理程序为,它在遇到致命错误或错误后终止封送处理操作。对于JAXB2.0客户端应用程序,没有明确定义的默认验证处理程序,默认事件处理程序仅在遇到致命错误后终止解组操作


JAXB不强制执行验证规则。要强制执行验证规则,您需要在解析XML时指定XSD架构,并启用验证。@Andreas我认为这是一个答案,而不是注释。也许在文章中附带一个关于如何创建模式实例并将其设置在解组器上的小片段?谢谢Andreas,还有一个信息——这是供应商提供的xml,我们从中生成了模式。他们正在发送xml本身中的唯一约束,因此在标记处解析失败。@G_H Answer已添加。感谢Andreas的帖子。