自定义消息错误:消息由于XML验证错误而被拒绝;嵌套异常为

问题描述

我正在读取针对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()来单独访问所有错误。