java - Spring 集成 : no output-channel or replychannel header available

标签 java spring spring-integration

我写了一个简单的 spring 集成应用程序,将文件从一个目录移动到另一个目录,它看起来像这样:

@Bean
@InboundChannelAdapter(value="requestChannel", poller = @Poller(fixedDelay="100"))
public FileReadingMessageSource adapter(){
    FileReadingMessageSource source = new FileReadingMessageSource();
    source.setDirectory(new File("D:/TestIn"));
    return source;

}

@Bean 
MessageChannel requestChannel(){
    return new DirectChannel();
}

@Bean
@ServiceActivator(inputChannel="requestChannel")
public FileWritingMessageHandler handle(){
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File("D:/TestOut"));
    handler.setDeleteSourceFiles(true);
    return handler;
}

它工作得很好,但是每次复制操作都会给我这个异常

    2015-03-26 09:56:39.222  INFO 4772 --- [ask-scheduler-5] o.s.i.file.FileReadingMessageSource      : Created message: [GenericMessage [payload=D:\TestIn\9.txt, headers={id=d8b27257-0a90-b7ad-65cb-85e93668fb5a, timestamp=1427360199222}]]
2015-03-26 09:56:39.223 ERROR 4772 --- [ask-scheduler-5] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.MessagingException: ; nested exception is org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    at org.springframework.integration.dispatcher.AbstractDispatcher.wrapExceptionIfNecessary(AbstractDispatcher.java:133)

我在另一个主题中读到,当您过滤掉代码中某处的 header 时会发生这种情况,但此跟踪的第一行告诉我,生成的唯一 header 是 id 和时间戳。

最佳答案

一切看起来都不错,但不是:您不会遇到在某处过滤掉 header 的问题。

那是因为 FileWritingMessageHandler 默认是 request/reply

要实现just move 要求,您应该添加以下内容:

handler.setExpectReply(false);

该组件的代码如下所示:

if (!this.expectReply) {
    return null;
}

if (resultFile != null) {
    if (originalFileFromHeader == null && payload instanceof File) {
        return this.getMessageBuilderFactory().withPayload(resultFile)
                    .setHeader(FileHeaders.ORIGINAL_FILE, payload);
    }
}
return resultFile;

因此,它尝试将 resultFile 发送到 @ServiceActivator 端点的 outputChannel。由于您没有这样的选项并且没有 replyChannel header ,因此您最终会遇到该异常。

关于java - Spring 集成 : no output-channel or replychannel header available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274479/

相关文章:

java - Ant:将源目录拆分为两个 jar

java - 当 @NotEmpty 用于返回类型时,hibernate validator 错误

spring-integration - 链中的转换器可以调用 channel 进行日志记录吗?

java - 如何使用谷歌的gson库

java.lang.NoSuchFieldError : DEF_CONTENT_CHARSET 错误

java - 你如何在 android 中捕获 UnknownHostException?

java - Spring @Autowired messageSource 在 Controller 中工作但不在其他类中工作?

java - 无法在 spring boot 应用程序中 Autowiring 接口(interface)

java - Spring集成中服务抛出的异常处理

java - 如何使用 spring 集成轮询目录中的文件并将文件发送到消息队列