Apache camel 如何根据XSD模式验证XML文件并列出所有验证错误

Apache camel 如何根据XSD模式验证XML文件并列出所有验证错误,apache-camel,jbossfuse,apache-servicemix,Apache Camel,Jbossfuse,Apache Servicemix,我正在根据xsd验证xml,当遇到第一个验证错误时会抛出第一个异常,但是,通过这种方法,我们无法在一次运行中获得xml文件中所有验证错误的信息。如果一个XML文件有多个验证错误,那么在第一次运行时,一旦遇到第一个错误,就会抛出异常,我们无法了解剩余的错误。要了解后续错误,我们需要修复之前的错误,并反复验证文件,直到没有引发异常 onException( SchemaValidationException.class ) .handled(true) .to("file:inv

我正在根据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");

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

 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());
 }
试试看{
trace(“验证{}”,源);
验证(来源、结果);
handler.handleErrors(交换、架构、结果);
}捕获(SAXE异常){
抛出新的SchemaValidationException(exchange、schema、Collections.singletonList(e)、Collections.emptyList()、Collections.emptyList());
}
验证是由
javax.xml.validation.Validator
类执行的。请看下面的讨论。文件指出:

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


也许你面临的错误是致命的?如果是这样的话,我认为这超出了Camel的组件控制范围(

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

 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());
 }
试试看{
trace(“验证{}”,源);
验证(来源、结果);
handler.handleErrors(交换、架构、结果);
}捕获(SAXE异常){
抛出新的SchemaValidationException(exchange、schema、Collections.singletonList(e)、Collections.emptyList()、Collections.emptyList());
}
不过,验证是由
javax.xml.validation.Validator
类执行的。请参见类似的讨论。文档说明:

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

也许您面临的错误是致命的?如果是这样,我认为这超出了Camel的组件控制范围(