spring-integration - 邮件:入站通道适配器返回类型
问题描述
我正在使用 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());
}
解决方案
ImapIdleChannelAdapter
是一个事件驱动的组件。这不是投票的来源。它将通过自己的内部任务产生消息。
您必须@InboundChannelAdapter
从其配置中删除 并添加 simple @Bean
。channel
必须直接配置一个ImapIdleChannelAdapter
对象。
推荐阅读
- javascript - 多次循环API调用得到随机结果
- vue.js - vuetify 如何将内容设置为选项卡 v-tabs-items
- r - 为什么这个 for 循环代码和 apply() 一样快?
- javascript - 如何让 Google 文件选择器脚本在公开共享的 Google 表格上启动?
- vue.js - VueJS PDF 网页视图
- ios - Core Image颜色内核的Metal Shading语言,如何传递一个float3数组
- ios - 如何检测哪个视图正在平移手势Swift
- ruby-on-rails - rails 验证错误消息不起作用
- c# - 如果数字 >= 24,则获得下一个可被 12 整除的数字
- c++ - 为什么通过通用引用运算符 (&&) 将变量的引用传递给可变参数模板函数失败?