如何根据XSD架构验证XML文件并列出所有验证错误

时间:2017-11-04 20:33:49

标签: apache-camel jbossfuse apache-servicemix

我正在针对xsd验证xml,当第一次验证错误遇到它抛出第一个异常时,但是,通过这种方法,我们无法在一次运行中获得有关XML文件中所有验证错误的信息。如果XML文件有多个验证错误,那么在第一次运行时,一旦遇到第一个错误就会抛出异常,并且我们无法了解剩余的错误。要了解后续错误,我们需要修复先前的错误并一次又一次地验证文件,直到没有异常被抛出。

onException( SchemaValidationException.class ) 
    .handled(true) 
    .to("file:invalid-data")

from("file:in-data?noop=true")
    .to("validator:file:my.xsd")
    .to("file:out-data");

1 个答案:

答案 0 :(得分:0)

您使用的是哪种Apache Camel版本?在2.20中,validation code会在验证后处理所有错误:

 try {
     LOG.trace("Validating {}", source);
     validator.validate(source, result);
     handler.handleErrors(exchange, schema, result);
 } catch (SAXParseException e) {
     throw new SchemaValidationException(exchange, schema, Collections.singletonList(e), Collections.<SAXParseException>emptyList(), Collections.<SAXParseException>emptyList());
 }

验证由javax.xml.validation.Validator类执行。请参阅具有类似讨论的this question。文件说:

  

验证期间发现的错误将发送到指定的ErrorHandler。   如果文档有效,或者文档包含一些错误但没有一个是致命的并且ErrorHandler没有抛出任何异常,那么该方法将正常返回。

也许您面临的错误是致命的?如果是这样的话,我认为这不是Camel的组件控制。 :(