首先,
javax.xml.bind.Validator不赞成使用
javax.xml.validation.Schema(javadoc)。这个想法是您通过
javax.xml.validation.SchemaFactory(javadoc)解析模式,并将其注入到marshaller
/ unmarshaller中。
关于您的有关不进行编组验证的问题,这里的问题是JAXB实际上将验证委托给Xerces(或您使用的任何SAX处理器),并且Xerces将您的文档验证为SAX事件流。因此,为了进行验证,您需要执行
某种 编组。
影响最小的实现是使用SAX处理器的“ / dev / null”实现。编组为null OutputStream仍将涉及XML生成,这很浪费。所以我建议:
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);Schema schema = schemaFactory.newSchema(locationOfMySchema);Marshaller marshaller = jaxbContext.createMarshaller();marshaller.setSchema(schema);marshaller.marshal(objectToMarshal, new DefaultHandler());
DefaultHandler将丢弃所有事件,并且
marshal()如果针对架构的验证失败,则该操作将引发JAXBException。



