2017-07-06 1 views
1

Mein Flow ist wieFrühling Integration, wie besser definiert Validierungskomponente

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(); 

Frage zu beschreiben, ist über den Prüfer. Zur Zeit habe ich den Validator als "transparenten" Transformator erstellt, der auslöst, wenn die Daten in der Nachricht nicht gültig sind. Der gesamte Fluss wird in eine Pseudo-Transaktion eingeschlossen, um Fehler zu behandeln, wie in "how to move processed file to another directory using Spring integration ftp inbound adapter" vorgeschlagen.

Aber was wäre der beste Weg, einen logischen Validator in den Flow zu integrieren? Sollte es Transformer oder eine andere Art von Strömungskomponente sein?

Antwort

1

Es gibt Filter EIP. Und natürlich bietet Spring Integration one zu diesem Thema.

Sie DataValidator müssen true/false für den Zustand zurückzukehren, und es gibt throw-exception-on-rejection Option für Ihre Ablagelogik:

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

Dank Artem! Unser Validator müsste jedoch einige Fehlerinformationen weiterleiten (an den Fehlerkanal-Handler) - was speziell ungültig war. Wie können wir das erreichen? –

+0

Guter Punkt! So kann Ihr 'DataValidator' eine Exception auslösen und Sie können 'ExpressionEvaluatingRequestHandlerAdvice' verwenden, um den' failureChannel' zur Verarbeitung abzufangen und zu senden –

Verwandte Themen