【问题标题】:How To Set Cancel-Idle-Interval Attribute of IMAP Mail Receiver Channel using XML Configuration如何使用 XML 配置设置 IMAP 邮件接收通道的 Cancel-Idle-Interval 属性
【发布时间】:2019-08-05 19:04:08
【问题描述】:

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

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

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

下面是 imap-idle 通道代码,它根据 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]

【问题讨论】:

    标签: java spring spring-integration


    【解决方案1】:

    cancelIdleInterval 目前无法使用 XML 进行配置;您必须使用JavaConfig 连接bean 或使用简单的&lt;bean/&gt; 配置而不是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

    【讨论】:

    • 谢谢 Gary,我现在就玩这个。此外,团队能否创建一个包含所有可在接收渠道中使用的属性的文档?这将非常有帮助。感谢您的回复。
    • 您可以查看XSD(架构)以查看支持哪些属性;如果您使用支持 Spring 的 IDE(STS、IDEA 等),则可以在创建 XML 配置时获取有效属性的内容辅助。
    猜你喜欢
    • 2019-10-07
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多