我正在针对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");
答案 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的组件控制。 :(