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 @@ - - - - + - - - -