Java Spring集成,如何更好地描述验证组件

Java Spring集成,如何更好地描述验证组件,java,spring,validation,spring-integration,Java,Spring,Validation,Spring Integration,我的流定义如下 return IntegrationFlows.from( (MessageSourceSpec<?, ? extends MessageSource<?>>) Files.inboundAdapter(directory) .autoCreateDirectory(false) .patternFilter("*.xml"), e -> e.poller(Pollers.fixedDelay(1000

我的流定义如下

return IntegrationFlows.from(
(MessageSourceSpec<?, ? extends MessageSource<?>>) Files.inboundAdapter(directory)
           .autoCreateDirectory(false)
           .patternFilter("*.xml"),
  e -> e.poller(Pollers.fixedDelay(1000)) )) 
  .transform(new TransformXmlToMyDocument())
  .transform(new DataValidator())  // VALIDATOR
  .transform(new TransformMyDocumentToRabbitDomain())
  .channel(pubSubRabbitOutput)
  .get();
返回IntegrationFlows.from(
(MessageSourceSpec>)文件。inboundAdapter(目录)
.autoCreateDirectory(错误)
.patternFilter(“*.xml”),
e->e.poller(Pollers.fixedDelay(1000)))
.transform(新TransformXmlToMyDocument())
.transform(新的DataValidator())//验证程序
.transform(新TransformMyDocumentToRabbitDomain())
.通道(PubSubRabbit输出)
.get();
问题是关于验证器的。目前,我制作的验证器是一个“透明”转换器,如果消息中的数据无效,它将抛出。整个流将包装在伪事务中,以处理“”中建议的错误

但是,在流程中包含逻辑验证器的最佳方式是什么?应该是Transformer还是其他类型的流量部件?

有。当然,Spring集成在这个问题上提供了支持

您必须为条件返回
DataValidator
true/false
,并且您的丢弃逻辑有
拒绝时抛出异常
选项:

 .filter(new DataValidator(), "validate", e -> e.throwExceptionOnRejection(true))

谢谢你,阿泰姆!然而,我们的验证器需要进一步传播(到错误通道处理程序)一些错误信息——具体来说是无效的。我们如何才能做到这一点?很好!因此,您的
DataValidator
可以引发异常,您可以使用
expressionevaluationrequesthandleradvice
捕获并发送到
failureChannel
进行处理