java - 如何使用 XML 配置设置 IMAP 邮件接收 channel 的取消空闲间隔属性

标签 java spring spring-integration

我正在尝试设置 imap 空闲接收 channel 的 setCancelIdleInterval 属性。我正在使用基于 xml 的配置。这是必需的,因为此处报告了问题:“Spring Integration Mail Google IMAP how to set the frequency of checking the inbox ”。

给出的解决方案是针对 Java DSL 配置的,当我尝试在 xml 中实现它时,出现了错误。

我再次阅读了 Spring Integration 文档,并尝试获取每个接收协议(protocol)(IMAP、POP3)支持的所有属性的列表,但找不到任何此类文档。如果能制定这样一个文件,那将会非常有帮助。

下面是 imap-idle channel 代码,它根据 cancel-idle-interval 属性生成错误。

<int-mail:imap-idle-channel-adapter id="customAdapter"
        store-uri="imap://[username]:[password]@[domain]:993/INBOX"
        channel="receiveChannel"
        auto-startup="true"
        should-delete-messages="false"
        should-mark-messages-as-read="false"
        cancel-idle-interval=1740
        java-mail-properties="javaMailProperties"/>

这是我尝试执行项目构建时收到的错误消息:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from relative location [application-email-parser-config.xml]
Offending resource: ServletContext resource [/WEB-INF/classes/applicationContext.xml]; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 66 in XML document from ServletContext resource [/WEB-INF/classes/application-email-parser-config.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 66; columnNumber: 52; cvc-complex-type.3.2.2: Attribute 'cancel-idle-interval' is not allowed to appear in element 'int-mail:imap-idle-channel-adapter'.
    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:72) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:119) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:104) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:265) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:190) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:175) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:148) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:98) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:223) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:194) ~[spring-beans-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) ~[spring-web-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) ~[spring-web-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:133) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:619) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409) ~[spring-web-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) [spring-web-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) [spring-web-5.0.10.RELEASE.jar:5.0.10.RELEASE]
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4792) [catalina.jar:8.5.31]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5256) [catalina.jar:8.5.31]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.31]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754) [catalina.jar:8.5.31]
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) [catalina.jar:8.5.31]
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.31]
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:629) [catalina.jar:8.5.31]
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1839) [catalina.jar:8.5.31]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_201]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_201]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_201]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]

最佳答案

cancelIdleInterval目前无法使用 XML 进行配置;你必须使用 JavaConfig 连接 bean或使用简单的 <bean/>配置而不是 int-mail:命名空间。

<bean id="receiver" class="org.springframework.integration.mail.ImapMailReceiver">
     <property name="cancelIdleInterval" value="30" />
     ... other properties.
</bean>

<bean id="adapter" class="org.springframework.integration.mail.ImapIdleChannelAdapter">
    <constructor-arg ref="receiver" />
    ... other properties (outputChannel etc).
</bean>

我打开了an issue to add it to the int-mail namespace .

关于java - 如何使用 XML 配置设置 IMAP 邮件接收 channel 的取消空闲间隔属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364689/

相关文章:

javascript - 使用 $resource 发送音频数据 (base64)

java - 在域对象生成器中进行 Spring 验证是个好主意吗?

spring - 如何为 Spring Integration JDBC 出站 channel 适配器创建动态查询?

jackson 无法识别的字段异常,但字段在 JSON 中

java - 提高 Lombok @Data 代码覆盖率

java - 为什么如果我使用循环作为输入,算法会变慢

java - 如何在 java web 中将项目名称添加到 url

spring-integration-mqtt 带有多个 Mqtt Server 用于订阅

java - Hibernate Entitymanager 优雅删除无一异常(exception)?

java - 将 hasmap 参数传递给 insert 方法时出现 classcastException