From 58c768541a8562b31fb233b4b69c93ff9d743c58 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 18 Aug 2008 20:43:38 +0000 Subject: [PATCH] Added namespace support for configuring an endpoint's ErrorHandler strategy. For example, the "error-handler" attribute can be provided on the element with a bean name reference to any implementation of the ErrorHandler interface (INT-178). --- .../config/AbstractMessageEndpointParser.java | 3 +++ .../config/spring-integration-core-1.0.xsd | 1 + .../integration/util/ErrorHandler.java | 2 +- .../integration/config/EndpointParserTests.java | 12 ++++++++++++ .../integration/config/TestErrorHandler.java | 2 +- .../integration/config/endpointWithErrorHandler.xml | 10 +++++----- 6 files changed, 23 insertions(+), 7 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractMessageEndpointParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractMessageEndpointParser.java index 9b144ebfbe..65f85f9069 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractMessageEndpointParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractMessageEndpointParser.java @@ -54,6 +54,8 @@ public abstract class AbstractMessageEndpointParser extends AbstractSingleBeanDe private static final String SELECTOR_ATTRIBUTE = "selector"; + private static final String ERROR_HANDLER_ATTRIBUTE = "error-handler"; + private static final String INTERCEPTORS_ELEMENT = "interceptors"; @@ -111,6 +113,7 @@ public abstract class AbstractMessageEndpointParser extends AbstractSingleBeanDe IntegrationNamespaceUtils.setValueIfAttributeDefined( builder, element, OUTPUT_CHANNEL_ATTRIBUTE, "outputChannelName"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, SELECTOR_ATTRIBUTE); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, ERROR_HANDLER_ATTRIBUTE); String returnAddressOverridesAttribute = element.getAttribute(RETURN_ADDRESS_OVERRIDES_ATTRIBUTE); boolean returnAddressOverrides = "true".equals(returnAddressOverridesAttribute); builder.addPropertyValue("returnAddressOverrides", returnAddressOverrides); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd b/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd index 50ef413b20..99de95dd76 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd @@ -213,6 +213,7 @@ + diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/util/ErrorHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/util/ErrorHandler.java index 36d26d402f..f24fd60f6c 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/util/ErrorHandler.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/util/ErrorHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 5dfaf6ba8a..b84dc4248a 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 @@ -104,4 +104,16 @@ public class EndpointParserTests { endpoint.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/TestErrorHandler.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestErrorHandler.java index 7328c051bf..9572249841 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/TestErrorHandler.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/TestErrorHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. 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 index b49e67a9f2..2ee5ff3aa6 100644 --- 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 @@ -6,15 +6,15 @@ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-core-1.0.xsd"> - + - + - + - + - +