diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
index 3a8f2e5411..cf6e654fb2 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
@@ -46,8 +46,6 @@ public abstract class AbstractConsumerEndpointParser extends AbstractSingleBeanD
private static final String SELECTOR_ATTRIBUTE = "selector";
- private static final String ERROR_HANDLER_ATTRIBUTE = "error-handler";
-
@Override
protected final Class> getBeanClass(Element element) {
@@ -92,7 +90,6 @@ public abstract class AbstractConsumerEndpointParser extends AbstractSingleBeanD
BeanDefinitionBuilder consumerBuilder = this.parseConsumer(element, parserContext);
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(consumerBuilder, element, OUTPUT_CHANNEL_ATTRIBUTE);
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(consumerBuilder, element, SELECTOR_ATTRIBUTE);
- IntegrationNamespaceUtils.setReferenceIfAttributeDefined(consumerBuilder, element, ERROR_HANDLER_ATTRIBUTE);
String consumerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName(
consumerBuilder.getBeanDefinition(), parserContext.getRegistry());
builder.addConstructorArgReference(consumerBeanName);
diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd
index 608edfb60e..d1e1e61933 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd
@@ -218,7 +218,6 @@
-
diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractMessageConsumer.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractMessageConsumer.java
index c312dd4f21..4f6dc2d350 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractMessageConsumer.java
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractMessageConsumer.java
@@ -23,14 +23,13 @@ import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessagingException;
import org.springframework.integration.message.MessageConsumer;
import org.springframework.integration.message.MessageHandlingException;
-import org.springframework.integration.util.ErrorHandler;
import org.springframework.util.Assert;
/**
* Base class for MessageConsumer implementations that provides basic
* validation and error handling capabilities. Asserts that the incoming
- * Message is not null and that it does not contain a null payload. For custom
- * error handling, provide a reference to an {@link ErrorHandler}.
+ * Message is not null and that it does not contain a null payload. Converts
+ * checked exceptions into runtime {@link MessagingException}s.
*
* @author Mark Fisher
*/
@@ -38,49 +37,25 @@ public abstract class AbstractMessageConsumer implements MessageConsumer {
protected final Log logger = LogFactory.getLog(this.getClass());
- private volatile ErrorHandler errorHandler;
-
-
- /**
- * Provide an error handler for any Exceptions that occur
- * upon invocation of this consumer. If none is provided,
- * the Exception messages will be logged (at warn level),
- * and the Exception rethrown.
- */
- public void setErrorHandler(ErrorHandler errorHandler) {
- this.errorHandler = errorHandler;
- }
public final void onMessage(Message> message) {
Assert.notNull(message == null, "Message must not be null");
Assert.notNull(message.getPayload(), "Message payload must not be null");
if (this.logger.isDebugEnabled()) {
- this.logger.debug("consumer '" + this + "' processing message: " + message);
+ this.logger.debug("consumer '" + this + "' received message: " + message);
}
try {
this.onMessageInternal(message);
}
catch (Exception e) {
if (e instanceof MessagingException) {
- this.handleException((MessagingException) e);
- }
- else {
- this.handleException(new MessageHandlingException(message,
- "failure occurred in consumer '" + this.toString() + "'", e));
+ throw (MessagingException) e;
}
+ throw new MessageHandlingException(message,
+ "error occurred in consumer [" + this + "]", e);
}
}
- protected void handleException(MessagingException exception) {
- if (this.errorHandler == null) {
- if (this.logger.isWarnEnabled()) {
- this.logger.warn("exception occurred in consumer '" + this + "'", exception);
- }
- throw exception;
- }
- this.errorHandler.handle(exception);
- }
-
- protected abstract void onMessageInternal(Message> message);
+ protected abstract void onMessageInternal(Message> message) throws Exception;
}
diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractReplyProducingMessageConsumer.java b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractReplyProducingMessageConsumer.java
index a1a9b477fa..1d150921d3 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractReplyProducingMessageConsumer.java
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/endpoint/AbstractReplyProducingMessageConsumer.java
@@ -19,12 +19,12 @@ package org.springframework.integration.endpoint;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.integration.channel.BeanFactoryChannelResolver;
+import org.springframework.integration.channel.ChannelResolutionException;
import org.springframework.integration.channel.ChannelResolver;
import org.springframework.integration.channel.MessageChannelTemplate;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.core.MessageHeaders;
-import org.springframework.integration.core.MessagingException;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.integration.message.MessageHandlingException;
import org.springframework.integration.message.MessageProducer;
@@ -153,13 +153,14 @@ public abstract class AbstractReplyProducingMessageConsumer extends AbstractMess
replyChannel = this.channelResolver.resolveChannelName((String) replyChannelHeader);
}
else {
- throw new MessagingException("expected a MessageChannel or String for 'replyChannel', but type is ["
+ throw new ChannelResolutionException("expected a MessageChannel or String for 'replyChannel', but type is ["
+ replyChannelHeader.getClass() + "]");
}
}
}
if (replyChannel == null) {
- throw new MessagingException("unable to resolve reply channel");
+ throw new ChannelResolutionException(
+ "unable to resolve reply channel for message: " + requestMessage);
}
return replyChannel;
}
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointParserTests.java
index f30336d291..4d8a12e28d 100644
--- a/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointParserTests.java
+++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/EndpointParserTests.java
@@ -31,7 +31,6 @@ import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.integration.message.MessageRejectedException;
-import org.springframework.integration.message.StringMessage;
/**
* @author Mark Fisher
@@ -76,16 +75,4 @@ public class EndpointParserTests {
inputChannel.send(message);
}
- @Test
- public void testEndpointWithErrorHandler() {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
- "endpointWithErrorHandler.xml", this.getClass());
- MessageChannel channel = (MessageChannel) context.getBean("channel");
- TestErrorHandler errorHandler = (TestErrorHandler) context.getBean("errorHandler");
- assertNull(errorHandler.getLastError());
- channel.send(new StringMessage("test"));
- assertNotNull(errorHandler.getLastError());
- assertEquals("intentional test failure", errorHandler.getLastError().getMessage());
- }
-
}
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointWithErrorHandler.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointWithErrorHandler.xml
deleted file mode 100644
index 3cd67d2464..0000000000
--- a/org.springframework.integration/src/test/java/org/springframework/integration/config/endpointWithErrorHandler.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/ReturnAddressTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/ReturnAddressTests.java
index e735eff4e6..0dbe146334 100644
--- a/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/ReturnAddressTests.java
+++ b/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/ReturnAddressTests.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNull;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.integration.channel.ChannelResolutionException;
import org.springframework.integration.channel.PollableChannel;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessageChannel;
@@ -98,17 +99,14 @@ public class ReturnAddressTests {
assertNull(channel2.receive(0));
}
- @Test
+ @Test(expected = ChannelResolutionException.class)
public void returnAddressFallbackButNotAvailable() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"returnAddressTests.xml", this.getClass());
MessageChannel channel3 = (MessageChannel) context.getBean("channel3");
- PollableChannel errorChannel = (PollableChannel) context.getBean("errorChannel");
context.start();
StringMessage message = new StringMessage("*");
channel3.send(message);
- Message> errorMessage = errorChannel.receive(3000);
- assertNotNull(errorMessage.getPayload());
}
@Test
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/returnAddressTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/returnAddressTests.xml
index 92f0a5cad8..88d7011bc1 100644
--- a/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/returnAddressTests.xml
+++ b/org.springframework.integration/src/test/java/org/springframework/integration/endpoint/returnAddressTests.xml
@@ -21,19 +21,12 @@
-
-
-
-
+
-
-
-
-