Apache camel 如何根据XSD模式验证XML文件并列出所有验证错误
我正在根据xsd验证xml,当遇到第一个验证错误时会抛出第一个异常,但是,通过这种方法,我们无法在一次运行中获得xml文件中所有验证错误的信息。如果一个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
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的组件控制范围(