首页 > 解决方案 > 邮件:入站通道适配器返回类型

问题描述

我正在使用 Java 注释ImapIdleChannelAdapter.

不清楚要从什么对象类型传递@InboundChannelAdapter@ServiceActivator

代码片段:

@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "5000"))
public ImapIdleChannelAdapter getMailAdapter() {
    ImapMailReceiver mailReceiver = new ImapMailReceiver("imaps://username:password@map-mail.outlook.com:993/INBOX");
    ...
    return new ImapIdleChannelAdapter(mailReceiver);
}

@ServiceActivator(inputChannel = "inputChannel")
public void readMessage(Message<javax.mail.Message> message) {
    System.out.println(message.getPayload().getAllRecipients());
}

ImapIdleChannelAdapter消息来源说“消息有效负载将是收到的 javax.mail.Message 实例”。ImapIdleChannelAdapter cannot be cast to javax.mail.Message不过,在运行上面的代码时,我收到了一个类转换异常。

如果我将 SA 的方法参数更改为 javax.mail.Message,我会得到spel.SpelEvaluationException: EL1004E: Method call cannot be found on .. type

@ServiceActivator(inputChannel = "inputChannel")
public void readMessage(javax.mail.Message message) throws MessagingException {
    System.out.println(message.getAllRecipients());
}

标签: spring-integration

解决方案


ImapIdleChannelAdapter是一个事件驱动的组件。这不是投票的来源。它将通过自己的内部任务产生消息。

您必须@InboundChannelAdapter从其配置中删除 并添加 simple @Beanchannel必须直接配置一个ImapIdleChannelAdapter对象。


推荐阅读