问题描述
我正在读取针对xsd文件验证过的XML文件。如果存在验证错误,则工作流将在IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME通道中列出。我收到错误消息。该企业对默认消息不满意(请参阅下文)。现在,我解析结果以仅显示相关信息。有什么方法可以只访问给出不正确或缺少xml标记的子字符串?
由于XML验证错误,邮件被拒绝;嵌套的异常是org.springframework.integration.xml.AggregatedXmlMessageValidationException:多种原因: cvc-datatype-valid.1.2.1:“ 1900”不是“日期”的有效值。 cvc-type.3.1.3:元素“ BirthDate”的值“ 1900”无效。
@Bean
public MessageFilter validatexml() throws IOException,AggregatedXmlMessageValidationException {
XmlValidatingMessageSelector validate_xsd = new XmlValidatingMessageSelector(myfile.xsd,XmlValidatingMessageSelector.SchemaType.XML_SCHEMA);
validate_xsd.setThrowExceptionOnRejection(true);
return new MessageFilter(validate_xsd);
}
@Bean
public IntegrationFlow processFileFlowLocal() throws IOException,AggregatedXmlMessageValidationException {
return IntegrationFlows.from("inputChannel")
.handle(validatexml())
.transform(new UnmarshallingTransformer(jaxbMarshaller()))
.handle("payloadTransformer","myObject")
.transform(new ObjectToJsonTransformer())
.handle(httpGateway())
.handle("responseProcess","process")
.get();
}
@Bean
public IntegrationFlow errorFlow() {
return IntegrationFlows.from(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)
.handle(handleMessage())
.get();
}
Thank you.
解决方法
不确定您的要求是什么,但是您绝对可以查看AggregatedXmlMessageValidationException
并使用其List<Throwable> getExceptions()
来单独访问所有错误。