diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/AbstractPollingEndpoint.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/AbstractPollingEndpoint.java index c2dba0e660..3f9eb4c5cf 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/AbstractPollingEndpoint.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/AbstractPollingEndpoint.java @@ -41,7 +41,7 @@ import org.springframework.util.ErrorHandler; * @author Mark Fisher * @author Oleg Zhurakousky */ -public abstract class AbstractPollingEndpoint extends AbstractEndpoint implements InitializingBean, BeanClassLoaderAware, Callable{ +public abstract class AbstractPollingEndpoint extends AbstractEndpoint implements InitializingBean, BeanClassLoaderAware{ private volatile TaskExecutor taskExecutor = new SyncTaskExecutor(); @@ -97,11 +97,15 @@ public abstract class AbstractPollingEndpoint extends AbstractEndpoint implement @SuppressWarnings("unchecked") private Runnable createPoller() throws Exception{ - Callable pollingTask = this; + Callable pollingTask = new Callable() { + public Boolean call() throws Exception { + return doPoll(); + } + }; Advisor transactionAdvice = this.pollerMetadata.getTransactionAdvisor(); List adviceChain = this.pollerMetadata.getAdviceChain(); if (transactionAdvice != null || !CollectionUtils.isEmpty(adviceChain)){ - ProxyFactory proxyFactory = new ProxyFactory(this); + ProxyFactory proxyFactory = new ProxyFactory(pollingTask); // Add Transaction advice first if (transactionAdvice != null){ @@ -153,6 +157,7 @@ public abstract class AbstractPollingEndpoint extends AbstractEndpoint implement this.errorHandler = errorHandler; } + protected abstract boolean doPoll(); /** * Default Poller implementation */ diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/PollingConsumer.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/PollingConsumer.java index d7bc584469..ead5aac5a0 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/PollingConsumer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/PollingConsumer.java @@ -48,8 +48,8 @@ public class PollingConsumer extends AbstractPollingEndpoint { this.receiveTimeout = receiveTimeout; } - - public Boolean call() { + @Override + protected boolean doPoll() { Message message = (this.receiveTimeout >= 0) ? this.inputChannel.receive(this.receiveTimeout) : this.inputChannel.receive(); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java index f5a8fb4288..ac972c14e0 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/endpoint/SourcePollingChannelAdapter.java @@ -83,8 +83,9 @@ public class SourcePollingChannelAdapter extends AbstractPollingEndpoint impleme Assert.notNull(this.outputChannel, "outputChannel must not be null"); super.onInit(); } - - public Boolean call() throws Exception { + + @Override + protected boolean doPoll() { Message message = this.source.receive(); if (message != null) { if (this.shouldTrack) { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/endpoint/PollingEndpointStub.java b/spring-integration-core/src/test/java/org/springframework/integration/endpoint/PollingEndpointStub.java index b56ae2ac43..df0f625f57 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/endpoint/PollingEndpointStub.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/endpoint/PollingEndpointStub.java @@ -30,8 +30,8 @@ public class PollingEndpointStub extends AbstractPollingEndpoint { this.setPollerMetadata(pollerMetadata); } - //@Override - public Boolean call() { + @Override + protected boolean doPoll() { throw new RuntimeException("intentional test failure"); }