使用通用XML类型的JAXB模式验证

时间:2018-03-06 19:22:33

标签: xml jaxb jaxb2

我有一个要求,即XML有效负载在一个信封内传递,其中有效负载被定义为org.w3c.dom.Element。

每个有效负载需要根据它的模式进行验证(大约有40个),其中许多都有导入到其他模式。

附加的代码目前已经验证,但我确信它只会再次验证生成的模式(XMLDocument),并且它已经很好地形成,它会通过验证。

我已经看到了如何针对特定模式进行验证的示例 - 但直到解析时,我才知道有效负载的Document子类是什么。

非常感谢您的建议......

JAXBContext jaxbContext = JAXBContext.newInstance();
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        QName qName = new QName("");
        JAXBElement<Object> rootElement = new JAXBElement<Object>(qName, Object.class, message.getPayload());

        JAXBSource theXML = new JAXBSource(jaxbContext, rootElement);

        SchemaFactory schemaFactory = Schema.Factory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = schemaFactory.newSchema();

        jaxbUnmarshaller.setSchema(schema);
        Validator validator = schema.newValidator();
        validator.setErrorHandler(new CustomValidationErrorHandler());

        validator.validate(theXML);

1 个答案:

答案 0 :(得分:0)

基于来自其他地方的一些反馈,我通过SAX或DOM路由解析它,并让解析器通过使用解析器的自发现机制来查找文档的XSD来确定它是否有效。