GH-3017: Expose cancel-idle-interval XML attribute
Fixes https://github.com/spring-projects/spring-integration/issues/3017 * Expose also a `ImapIdleChannelAdapterSpec.cancelIdleInterval()` option * Deprecate useless `ImapMailInboundChannelAdapterSpec.cancelIdleInterval()` * Fix language in the Doc
This commit is contained in:
committed by
Gary Russell
parent
6d0757a08a
commit
ca8377da9b
@@ -102,7 +102,7 @@ public class ImapIdleChannelAdapterParser extends AbstractChannelAdapterParser {
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(receiverBuilder, element, "embedded-parts-as-bytes");
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(receiverBuilder, element, "simple-content");
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(receiverBuilder, element, "auto-close-folder");
|
||||
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(receiverBuilder, element, "cancel-idle-interval");
|
||||
return receiverBuilder.getBeanDefinition();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,6 +368,20 @@ public class ImapIdleChannelAdapterSpec
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* How often to recycle the idle task (in case of a silently dropped connection).
|
||||
* Seconds; default 120 (2 minutes).
|
||||
* @param interval the interval.
|
||||
* @return the spec.
|
||||
* @see ImapMailReceiver#setCancelIdleInterval(long)
|
||||
* @since 5.2
|
||||
*/
|
||||
public ImapIdleChannelAdapterSpec cancelIdleInterval(long interval) {
|
||||
assertReceiver();
|
||||
this.receiver.setCancelIdleInterval(interval);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Object, String> getComponentsToRegister() {
|
||||
return this.componentsToRegister;
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.springframework.integration.mail.SearchTermStrategy;
|
||||
*
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
*
|
||||
* @since 5.0
|
||||
*/
|
||||
public class ImapMailInboundChannelAdapterSpec
|
||||
@@ -72,12 +73,13 @@ public class ImapMailInboundChannelAdapterSpec
|
||||
* @return the spec.
|
||||
* @see ImapMailReceiver#setCancelIdleInterval(long)
|
||||
* @since 5.0.10
|
||||
* @deprecated since 5.2: there is no idle task started for polling channel adapter.
|
||||
*/
|
||||
@Deprecated
|
||||
public ImapMailInboundChannelAdapterSpec cancelIdleInterval(long interval) {
|
||||
assertReceiver();
|
||||
this.receiver.setCancelIdleInterval(interval);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -171,6 +171,14 @@
|
||||
</xsd:appinfo>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="cancel-idle-interval" type="xsd:string">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
How often to recycle the idle task (in case of a silently dropped connection).
|
||||
Seconds; default 120 (2 minutes).
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
</xsd:extension>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
simple-content="true"
|
||||
embedded-parts-as-bytes="false"
|
||||
auto-close-folder="false"
|
||||
should-delete-messages="true"/>
|
||||
should-delete-messages="true"
|
||||
cancel-idle-interval="202"/>
|
||||
|
||||
<bean id="mapper" class="org.springframework.integration.mail.support.DefaultMailHeaderMapper" />
|
||||
|
||||
|
||||
@@ -58,25 +58,26 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
@Autowired
|
||||
private MessageChannel autoChannel;
|
||||
|
||||
@Autowired @Qualifier("autoChannel.adapter")
|
||||
@Autowired
|
||||
@Qualifier("autoChannel.adapter")
|
||||
private ImapIdleChannelAdapter autoChannelAdapter;
|
||||
|
||||
@Test
|
||||
public void simpleAdapter() {
|
||||
Object adapter = context.getBean("simpleAdapter");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
// mail.imap(s).peek properties
|
||||
assertThat(properties.size()).isEqualTo(2);
|
||||
assertThat(properties).hasSize(2);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldDeleteMessages")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(adapterAccessor.getPropertyValue("errorChannel")).isNull();
|
||||
@@ -85,24 +86,25 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
assertThat(receiverAccessor.getPropertyValue("headerMapper")).isNotNull();
|
||||
assertThat(receiverAccessor.getPropertyValue("simpleContent")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("autoCloseFolder")).isEqualTo(false);
|
||||
assertThat(receiverAccessor.getPropertyValue("cancelIdleInterval")).isEqualTo(202000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleAdapterWithErrorChannel() {
|
||||
Object adapter = context.getBean("simpleAdapterWithErrorChannel");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
// mail.imap(s).peek properties
|
||||
assertThat(properties.size()).isEqualTo(2);
|
||||
assertThat(properties).hasSize(2);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldDeleteMessages")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(adapterAccessor.getPropertyValue("errorChannel")).isSameAs(context.getBean("errorChannel"));
|
||||
@@ -112,42 +114,42 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleAdapterWithMarkeMessagesAsRead() {
|
||||
Object adapter = context.getBean("simpleAdapterMarkAsRead");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
public void simpleAdapterWithMarkMessagesAsRead() {
|
||||
Object adapter = this.context.getBean("simpleAdapterMarkAsRead");
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
Object channel = this.context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
// mail.imap(s).peek properties
|
||||
assertThat(properties.size()).isEqualTo(2);
|
||||
assertThat(properties).hasSize(2);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldDeleteMessages")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("userFlag")).isEqualTo("flagged");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleAdapterWithMarkeMessagesAsReadFalse() {
|
||||
public void simpleAdapterWithMarkMessagesAsReadFalse() {
|
||||
Object adapter = context.getBean("simpleAdapterMarkAsReadFalse");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
// mail.imap(s).peek properties
|
||||
assertThat(properties.size()).isEqualTo(2);
|
||||
assertThat(properties).hasSize(2);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldDeleteMessages")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead")).isEqualTo(Boolean.FALSE);
|
||||
}
|
||||
@@ -155,13 +157,13 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
@Test
|
||||
public void customAdapter() {
|
||||
Object adapter = context.getBean("customAdapter");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
@@ -180,25 +182,26 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
@Test
|
||||
public void transactionalAdapter() {
|
||||
Object adapter = context.getBean("transactionalAdapter");
|
||||
assertThat(adapter.getClass()).isEqualTo(ImapIdleChannelAdapter.class);
|
||||
assertThat(adapter).isInstanceOf(ImapIdleChannelAdapter.class);
|
||||
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
|
||||
Object channel = context.getBean("channel");
|
||||
assertThat(adapterAccessor.getPropertyValue("outputChannel")).isSameAs(channel);
|
||||
assertThat(adapterAccessor.getPropertyValue("autoStartup")).isEqualTo(Boolean.FALSE);
|
||||
Object receiver = adapterAccessor.getPropertyValue("mailReceiver");
|
||||
assertThat(receiver.getClass()).isEqualTo(ImapMailReceiver.class);
|
||||
assertThat(receiver).isInstanceOf(ImapMailReceiver.class);
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Object url = receiverAccessor.getPropertyValue("url");
|
||||
assertThat(url).isEqualTo(new URLName("imap:foo"));
|
||||
Properties properties = (Properties) receiverAccessor.getPropertyValue("javaMailProperties");
|
||||
// mail.imap(s).peek properties
|
||||
assertThat(properties.size()).isEqualTo(2);
|
||||
assertThat(properties).hasSize(2);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldDeleteMessages")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead")).isEqualTo(Boolean.TRUE);
|
||||
assertThat(adapterAccessor.getPropertyValue("errorChannel")).isNull();
|
||||
assertThat(adapterAccessor.getPropertyValue("sendingTaskExecutor")).isEqualTo(context.getBean("executor"));
|
||||
assertThat(adapterAccessor.getPropertyValue("adviceChain")).isNotNull();
|
||||
}
|
||||
|
||||
public static class TestSearchTermStrategy implements SearchTermStrategy {
|
||||
|
||||
@Override
|
||||
@@ -207,4 +210,5 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user