Ich habe ein Problem mit Spring Integration. Ich benutze Spring Boot 1.4.0.RELEASE, Spring Integration 4.3.1.RELEASE, Spring Integration DSL 1.2.0.M1.Spring Integration DSL - Outbound Gateway mit Zugriff auf Header
Was ich versuche zu tun:
ich eine Anwendung bin zu schreiben, die Dateien von FTP und lokale Dateisystem (unter Verwendung von Inbound-Channel-Adapter), übertragen Sie die Dateien auf einem lokalen Arbeitsverzeichnis (unter Verwendung von Datei lesen Outbound-Gateways), verarbeiten und dann an ein endgültiges Ziel verschieben (Datei Outbound-Gateway/Adapter).
BEARBEITEN: Das ursprüngliche Problem stammt von falscher Verwendung der OutboundGateway
. Für Details zu dem, was ich falsch gemacht habe, schaue dir den Bearbeitungsverlauf an.
Ich habe ein Problem mit der Verdrahtung eines OutboundGateway
, die Informationen aus dem Nachrichtenkopf benötigt.
Meine Grundströmung ist:
@Bean
@SuppressWarnings("unchecked")
public IntegrationFlow fileSystemReadingFlow() {
LOGGER.debug("Building fileSystemReadingFlow.");
// Create a FileInboundChannelAdapter
return IntegrationFlows.from(s -> s.file(new File(StringUtils.cleanPath(Paths.get(directoryProperties.getLocal() , UNKNOWN).toString())))
// Add a Filter to restrict which files are retrieved
.filter(fileListFilterBuilder.buildFileListFilter(File.class))
// Add a poller to continually watch the directory
, endpointConfigurer -> endpointConfigurer.poller(poller)
)
.enrichHeaders(h -> h.header(FOLDER_NAME, LOCAL))
.handle((message, headers) -> Files.outboundGateway(new File(StringUtils.cleanPath(Paths.get(directoryProperties.getWorking()
, (String) headers.get(FOLDER_NAME)).toString()))).deleteSourceFiles(true).autoCreateDirectory(true))
// Send the files to the aggregatingChannel
.channel("aggregatingFileChannel")
.get();
}
Die Frage der handle((message, headers) -> Files.outboundGateway(...)
Abschnitt ist. Mit der obigen Lambda-Methode spuckt dieser Fehler immer wieder aus.
ErrorMessage [payload=org.springframework.messaging.MessagingException: failed to resolve channel name 'org.springframework.integration.dsl.file.FileWritingMessageHandlerSpec'; nested exception is org.springframework.messaging.core.DestinationResolutionException: failed to look up MessageChannel with name 'org.springframework.integration.dsl.file.FileWritingMessageHandlerSpec' in the BeanFactory.; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'org.springframework.integration.dsl.file.FileWritingMessageHandlerSpec' is defined, headers={id=e3f5f341-6379-0dd0-11e6-e4bff8f455b0, timestamp=1471619276894}]
Die Dokumentation und meine Tests zeigen, dass die Definition wie folgt funktioniert. Aber wie bekomme ich Zugriff auf die Header?
.handle(Files.outboundGateway(new File("someDir"))).deleteSourceFiles(true).autoCreateDirectory(true))
Ich habe versucht, einen Spel Ausdruck verwendet, der die richtige Methode sein kann, aber ich habe es nicht an der Arbeit.
Großartig! Ich schätze, du kannst sogar deine eigene Antwort akzeptieren. –