diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java
index bf823a2725..b4db69d314 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java
@@ -39,10 +39,6 @@ public abstract class AbstractRemotingOutboundGateway extends AbstractMessageHan
}
- public void setRequestChannel(MessageChannel requestChannel) {
- this.setInputChannel(requestChannel);
- }
-
public void setReplyChannel(MessageChannel replyChannel) {
this.setOutputChannel(replyChannel);
}
diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingGatewayParser.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingGatewayParser.java
index d1d6bc6537..73945fe5f0 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingGatewayParser.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingGatewayParser.java
@@ -23,6 +23,7 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.integration.endpoint.config.ConsumerEndpointFactoryBean;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -33,7 +34,9 @@ import org.springframework.util.StringUtils;
*/
public abstract class AbstractRemotingGatewayParser extends AbstractSimpleBeanDefinitionParser {
- protected abstract Class> getBeanClass(Element element);
+ protected Class> getBeanClass(Element element) {
+ return ConsumerEndpointFactoryBean.class;
+ }
@Override
diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java
index ddf3f52815..b07dd5d7c7 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java
@@ -18,26 +18,64 @@ package org.springframework.integration.adapter.config;
import org.w3c.dom.Element;
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.integration.config.AbstractEndpointParser;
import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
/**
* Base class for url-based remoting outbound gateway parsers.
*
* @author Mark Fisher
*/
-public abstract class AbstractRemotingOutboundGatewayParser extends AbstractRemotingGatewayParser {
+public abstract class AbstractRemotingOutboundGatewayParser extends AbstractEndpointParser {
+
+ protected abstract Class> getGatewayClass(Element element);
@Override
- protected boolean isEligibleAttribute(String attributeName) {
- return !attributeName.equals("url") && super.isEligibleAttribute(attributeName);
+ protected String getInputChannelAttributeName() {
+ return "request-channel";
}
@Override
- protected void doPostProcess(BeanDefinitionBuilder builder, Element element) {
+ protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext)
+ throws BeanDefinitionStoreException {
+ String id = super.resolveId(element, definition, parserContext);
+ if (!StringUtils.hasText(id)) {
+ id = element.getAttribute("name");
+ }
+ if (!StringUtils.hasText(id)) {
+ id = parserContext.getReaderContext().generateBeanName(definition);
+ }
+ return id;
+ }
+
+ @Override
+ protected BeanDefinitionBuilder parseConsumer(Element element, ParserContext parserContext) {
+ BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(this.getGatewayClass(element));
+ String url = this.parseUrl(element);
+ builder.addConstructorArgValue(url);
+ String replyChannel = element.getAttribute("reply-channel");
+ if (StringUtils.hasText(replyChannel)) {
+ builder.addPropertyReference("replyChannel", replyChannel);
+ }
+ this.postProcessGateway(builder, element);
+ return builder;
+ }
+
+ protected String parseUrl(Element element) {
String url = element.getAttribute("url");
Assert.hasText(url, "The 'url' attribute is required.");
- builder.addConstructorArgValue(url);
+ return url;
+ }
+
+ /**
+ * Subclasses may override this method for additional configuration.
+ */
+ protected void postProcessGateway(BeanDefinitionBuilder builder, Element element) {
}
}
diff --git a/org.springframework.integration.file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests.java b/org.springframework.integration.file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests.java
index 2fb35dd2b9..208481e1c4 100644
--- a/org.springframework.integration.file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests.java
+++ b/org.springframework.integration.file/src/test/java/org/springframework/integration/file/config/FileOutboundChannelAdapterParserTests.java
@@ -27,7 +27,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.integration.endpoint.OutboundChannelAdapter;
+import org.springframework.integration.endpoint.SubscribingConsumerEndpoint;
import org.springframework.integration.file.DefaultFileNameGenerator;
import org.springframework.integration.file.FileWritingMessageConsumer;
import org.springframework.test.context.ContextConfiguration;
@@ -43,11 +43,11 @@ public class FileOutboundChannelAdapterParserTests {
@Autowired
@Qualifier("simpleAdapter")
- OutboundChannelAdapter simpleAdapter;
+ SubscribingConsumerEndpoint simpleAdapter;
@Autowired
@Qualifier("adapterWithCustomNameGenerator")
- OutboundChannelAdapter adapterWithCustomNameGenerator;
+ SubscribingConsumerEndpoint adapterWithCustomNameGenerator;
@Test
diff --git a/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java
index 17bcd4e806..9941798051 100644
--- a/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java
+++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java
@@ -29,7 +29,7 @@ import org.springframework.integration.httpinvoker.HttpInvokerOutboundGateway;
public class HttpInvokerOutboundGatewayParser extends AbstractRemotingOutboundGatewayParser {
@Override
- protected Class> getBeanClass(Element element) {
+ protected Class> getGatewayClass(Element element) {
return HttpInvokerOutboundGateway.class;
}
diff --git a/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java
index 89191765bb..838bde8d01 100644
--- a/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java
+++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java
@@ -20,8 +20,10 @@ import static org.junit.Assert.assertEquals;
import org.junit.Test;
+import org.springframework.beans.DirectFieldAccessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.integration.endpoint.SubscribingConsumerEndpoint;
import org.springframework.integration.httpinvoker.HttpInvokerOutboundGateway;
/**
@@ -33,7 +35,9 @@ public class HttpInvokerOutboundGatewayParserTests {
public void testHttpInvokerOutboundGatewayParser() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"httpInvokerOutboundGatewayParserTests.xml", this.getClass());
- Object gateway = context.getBean("gateway");
+ Object endpoint = context.getBean("gateway");
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
assertEquals(HttpInvokerOutboundGateway.class, gateway.getClass());
}
diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParser.java b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParser.java
index d0ffb58ae5..afe8a84215 100644
--- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParser.java
+++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParser.java
@@ -20,7 +20,6 @@ import java.rmi.registry.Registry;
import org.w3c.dom.Element;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.integration.adapter.config.AbstractRemotingOutboundGatewayParser;
import org.springframework.integration.rmi.RmiInboundGateway;
import org.springframework.integration.rmi.RmiOutboundGateway;
@@ -35,28 +34,19 @@ import org.springframework.util.StringUtils;
public class RmiOutboundGatewayParser extends AbstractRemotingOutboundGatewayParser {
@Override
- protected Class> getBeanClass(Element element) {
+ protected Class> getGatewayClass(Element element) {
return RmiOutboundGateway.class;
}
@Override
- protected boolean isEligibleAttribute(String attributeName) {
- return !"host".equals(attributeName)
- && !"port".equals(attributeName)
- && !"remote-channel".equals(attributeName)
- && super.isEligibleAttribute(attributeName);
- }
-
- @Override
- protected void doPostProcess(BeanDefinitionBuilder builder, Element element) {
+ protected String parseUrl(Element element) {
String host = element.getAttribute("host");
String remoteChannel = element.getAttribute("remote-channel");
Assert.isTrue(StringUtils.hasText(host) && StringUtils.hasText(remoteChannel),
"The 'host' and 'remote-channel' attributes are both required");
String portAttribute = element.getAttribute("port");
String port = StringUtils.hasText(portAttribute) ? portAttribute : "" + Registry.REGISTRY_PORT;
- String url = "rmi://" + host + ":" + port + "/" + RmiInboundGateway.SERVICE_NAME_PREFIX + remoteChannel;
- builder.addConstructorArgValue(url);
+ return "rmi://" + host + ":" + port + "/" + RmiInboundGateway.SERVICE_NAME_PREFIX + remoteChannel;
}
}
diff --git a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParserTests.java b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParserTests.java
index 9a674e4272..af59956052 100644
--- a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParserTests.java
+++ b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiOutboundGatewayParserTests.java
@@ -29,7 +29,6 @@ import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.StringMessage;
import org.springframework.integration.rmi.RmiInboundGateway;
-import org.springframework.integration.rmi.RmiOutboundGateway;
/**
* @author Mark Fisher
@@ -53,8 +52,8 @@ public class RmiOutboundGatewayParserTests {
public void directInvocation() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"rmiOutboundGatewayParserTests.xml", this.getClass());
- RmiOutboundGateway gateway = (RmiOutboundGateway) context.getBean("gateway");
- gateway.handle(new StringMessage("test"));
+ MessageChannel localChannel = (MessageChannel) context.getBean("localChannel");
+ localChannel.send(new StringMessage("test"));
Message> result = testChannel.receive(1000);
assertNotNull(result);
assertEquals("test", result.getPayload());
diff --git a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java
index ebf2740999..95c882541d 100644
--- a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java
+++ b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java
@@ -19,11 +19,10 @@ package org.springframework.integration.ws.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
-import org.springframework.beans.factory.xml.ParserContext;
-import org.springframework.integration.ConfigurationException;
+import org.springframework.integration.adapter.config.AbstractRemotingOutboundGatewayParser;
import org.springframework.integration.ws.handler.MarshallingWebServiceHandler;
import org.springframework.integration.ws.handler.SimpleWebServiceHandler;
+import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
@@ -31,37 +30,28 @@ import org.springframework.util.StringUtils;
*
* @author Mark Fisher
*/
-public class WebServiceHandlerParser extends AbstractSingleBeanDefinitionParser {
+public class WebServiceHandlerParser extends AbstractRemotingOutboundGatewayParser {
@Override
- protected Class> getBeanClass(Element element) {
+ protected Class> getGatewayClass(Element element) {
return (StringUtils.hasText(element.getAttribute("marshaller"))) ?
MarshallingWebServiceHandler.class : SimpleWebServiceHandler.class;
}
@Override
- protected boolean shouldGenerateId() {
- return false;
+ protected String getInputChannelAttributeName() {
+ return "input-channel";
}
@Override
- protected boolean shouldGenerateIdAsFallback() {
- return true;
- }
-
- @Override
- protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
+ protected String parseUrl(Element element) {
String uri = element.getAttribute("uri");
- if (!StringUtils.hasText(uri)) {
- throw new ConfigurationException("The 'uri' attribute is required.");
- }
- builder.addConstructorArgValue(uri);
- String inputChannel = element.getAttribute("input-channel");
- builder.addPropertyReference("inputChannel", inputChannel);
- String outputChannel = element.getAttribute("output-channel");
- if (StringUtils.hasText(outputChannel)) {
- builder.addPropertyReference("outputChannel", outputChannel);
- }
+ Assert.hasText(uri, "The 'uri' attribute is required.");
+ return uri;
+ }
+
+ @Override
+ protected void postProcessGateway(BeanDefinitionBuilder builder, Element element) {
String marshallerRef = element.getAttribute("marshaller");
if (StringUtils.hasText(marshallerRef)) {
builder.addConstructorArgReference(marshallerRef);
@@ -91,13 +81,10 @@ public class WebServiceHandlerParser extends AbstractSingleBeanDefinitionParser
if (StringUtils.hasText(faultMessageResolverRef)) {
builder.addPropertyReference("faultMessageResolver", faultMessageResolverRef);
}
-
String messageSenderRef = element.getAttribute("message-sender");
String messageSenderListRef = element.getAttribute("message-senders");
- if(StringUtils.hasText(messageSenderRef) && StringUtils.hasText(messageSenderListRef)){
- throw new ConfigurationException("Only one of message-sender or mesage-senders should be specified");
- }
-
+ Assert.isTrue(!(StringUtils.hasText(messageSenderRef) && StringUtils.hasText(messageSenderListRef)),
+ "Only one of message-sender or message-senders should be specified");
if (StringUtils.hasText(messageSenderRef)) {
builder.addPropertyReference("messageSender", messageSenderRef);
}
diff --git a/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java b/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java
index 66d30177e6..acd01b426c 100644
--- a/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java
+++ b/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java
@@ -24,6 +24,7 @@ import org.springframework.beans.DirectFieldAccessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.endpoint.MessageEndpoint;
+import org.springframework.integration.endpoint.SubscribingConsumerEndpoint;
import org.springframework.integration.ws.handler.MarshallingWebServiceHandler;
import org.springframework.integration.ws.handler.SimpleWebServiceHandler;
import org.springframework.oxm.Marshaller;
@@ -44,8 +45,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithDefaultSourceExtractor");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
assertEquals("DefaultSourceExtractor", accessor.getPropertyValue("sourceExtractor").getClass().getSimpleName());
}
@@ -54,8 +57,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomSourceExtractor");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
SourceExtractor sourceExtractor = (SourceExtractor) context.getBean("sourceExtractor");
assertEquals(sourceExtractor, accessor.getPropertyValue("sourceExtractor"));
}
@@ -65,8 +70,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomRequestCallback");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
WebServiceMessageCallback callback = (WebServiceMessageCallback) context.getBean("requestCallback");
assertEquals(callback, accessor.getPropertyValue("requestCallback"));
}
@@ -76,8 +83,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomMessageFactory");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate"));
WebServiceMessageFactory factory = (WebServiceMessageFactory) context.getBean("messageFactory");
assertEquals(factory, accessor.getPropertyValue("messageFactory"));
@@ -89,8 +98,10 @@ public class WebServiceHandlerParserTests {
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomSourceExtractorAndMessageFactory");
SourceExtractor sourceExtractor = (SourceExtractor) context.getBean("sourceExtractor");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
assertEquals(sourceExtractor, accessor.getPropertyValue("sourceExtractor"));
accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate"));
WebServiceMessageFactory factory = (WebServiceMessageFactory) context.getBean("messageFactory");
@@ -102,8 +113,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomFaultMessageResolver");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate"));
FaultMessageResolver resolver = (FaultMessageResolver) context.getBean("faultMessageResolver");
assertEquals(resolver, accessor.getPropertyValue("faultMessageResolver"));
@@ -115,8 +128,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomMessageSender");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate"));
WebServiceMessageSender messageSender = (WebServiceMessageSender) context.getBean("messageSender");
assertEquals(messageSender, ((WebServiceMessageSender[])accessor.getPropertyValue("messageSenders"))[0]);
@@ -126,8 +141,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"simpleWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomMessageSenderList");
- assertEquals(SimpleWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(SimpleWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate"));
WebServiceMessageSender messageSender = (WebServiceMessageSender) context.getBean("messageSender");
assertEquals(messageSender, ((WebServiceMessageSender[])accessor.getPropertyValue("messageSenders"))[0]);
@@ -139,10 +156,12 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"marshallingWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithAllInOneMarshaller");
- assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(MarshallingWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor gatewayAccessor = new DirectFieldAccessor(gateway);
DirectFieldAccessor templateAccessor = new DirectFieldAccessor(
- handlerAccessor.getPropertyValue("webServiceTemplate"));
+ gatewayAccessor.getPropertyValue("webServiceTemplate"));
Marshaller marshaller = (Marshaller) context.getBean("marshallerAndUnmarshaller");
assertEquals(marshaller, templateAccessor.getPropertyValue("marshaller"));
assertEquals(marshaller, templateAccessor.getPropertyValue("unmarshaller"));
@@ -153,10 +172,12 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"marshallingWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithSeparateMarshallerAndUnmarshaller");
- assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(MarshallingWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor gatewayAccessor = new DirectFieldAccessor(gateway);
DirectFieldAccessor templateAccessor = new DirectFieldAccessor(
- handlerAccessor.getPropertyValue("webServiceTemplate"));
+ gatewayAccessor.getPropertyValue("webServiceTemplate"));
Marshaller marshaller = (Marshaller) context.getBean("marshaller");
Unmarshaller unmarshaller = (Unmarshaller) context.getBean("unmarshaller");
assertEquals(marshaller, templateAccessor.getPropertyValue("marshaller"));
@@ -168,8 +189,10 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"marshallingWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomRequestCallback");
- assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(MarshallingWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
WebServiceMessageCallback callback = (WebServiceMessageCallback) context.getBean("requestCallback");
assertEquals(callback, accessor.getPropertyValue("requestCallback"));
}
@@ -179,10 +202,12 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"marshallingWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithAllInOneMarshallerAndMessageFactory");
- assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(MarshallingWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor gatewayAccessor = new DirectFieldAccessor(gateway);
DirectFieldAccessor templateAccessor = new DirectFieldAccessor(
- handlerAccessor.getPropertyValue("webServiceTemplate"));
+ gatewayAccessor.getPropertyValue("webServiceTemplate"));
Marshaller marshaller = (Marshaller) context.getBean("marshallerAndUnmarshaller");
assertEquals(marshaller, templateAccessor.getPropertyValue("marshaller"));
assertEquals(marshaller, templateAccessor.getPropertyValue("unmarshaller"));
@@ -195,10 +220,12 @@ public class WebServiceHandlerParserTests {
ApplicationContext context = new ClassPathXmlApplicationContext(
"marshallingWebServiceHandlerParserTests.xml", this.getClass());
MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithSeparateMarshallerAndUnmarshallerAndMessageFactory");
- assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass());
- DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint);
+ assertEquals(SubscribingConsumerEndpoint.class, endpoint.getClass());
+ Object gateway = new DirectFieldAccessor(endpoint).getPropertyValue("consumer");
+ assertEquals(MarshallingWebServiceHandler.class, gateway.getClass());
+ DirectFieldAccessor gatewayAccessor = new DirectFieldAccessor(gateway);
DirectFieldAccessor templateAccessor = new DirectFieldAccessor(
- handlerAccessor.getPropertyValue("webServiceTemplate"));
+ gatewayAccessor.getPropertyValue("webServiceTemplate"));
Marshaller marshaller = (Marshaller) context.getBean("marshaller");
Unmarshaller unmarshaller = (Unmarshaller) context.getBean("unmarshaller");
assertEquals(marshaller, templateAccessor.getPropertyValue("marshaller"));
diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/AbstractMessageBarrierEndpoint.java b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/AbstractMessageBarrierEndpoint.java
index a69ab622af..1eaf4bdcd6 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/AbstractMessageBarrierEndpoint.java
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/aggregator/AbstractMessageBarrierEndpoint.java
@@ -27,26 +27,29 @@ import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.integration.channel.BlockingChannel;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.endpoint.AbstractMessageHandlingEndpoint;
-import org.springframework.integration.endpoint.MessageEndpoint;
import org.springframework.integration.message.Message;
+import org.springframework.integration.message.MessageConsumer;
import org.springframework.integration.message.MessageHandlingException;
import org.springframework.integration.scheduling.IntervalTrigger;
+import org.springframework.integration.scheduling.TaskScheduler;
import org.springframework.integration.scheduling.TaskSchedulerAware;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
/**
- * Base class for {@link MessageBarrier}-based MessageHandlers.
- * A {@link MessageEndpoint} implementation that waits for a group of
+ * Base class for {@link MessageBarrier}-based Message Consumers.
+ * A {@link MessageConsumer} implementation that waits for a group of
* {@link Message Messages} to arrive and processes them together.
- * Uses a {@link MessageBarr ier} to store messages and to decide how
+ * Uses a {@link MessageBarrier} to store messages and to decide how
* the messages should be released.
*
- * Each {@link Message} that is received by this endpoint will be associated with
+ * Each {@link Message} that is received by this consumer will be associated with
* a group based upon the 'correlationId' property of its
* header. If no such property is available, a {@link MessageHandlingException}
* will be thrown.
@@ -60,7 +63,7 @@ import org.springframework.util.ObjectUtils;
* @author Mark Fisher
* @author Marius Bogoevici
*/
-public abstract class AbstractMessageBarrierEndpoint extends AbstractMessageHandlingEndpoint implements TaskSchedulerAware {
+public abstract class AbstractMessageBarrierEndpoint extends AbstractMessageHandlingEndpoint implements TaskSchedulerAware, InitializingBean {
public final static long DEFAULT_SEND_TIMEOUT = 1000;
@@ -91,8 +94,11 @@ public abstract class AbstractMessageBarrierEndpoint extends AbstractMessageHand
private volatile boolean initialized;
+ private TaskScheduler taskScheduler;
+
private ScheduledFuture> reaperFutureTask;
+
/**
* Specify a channel for sending Messages that arrive after their aggregation
* group has either completed or timed-out.
@@ -141,26 +147,32 @@ public abstract class AbstractMessageBarrierEndpoint extends AbstractMessageHand
this.timeout = timeout;
}
- /**
- * Initialize this endpoint.
- */
- @Override
- protected void initialize() throws Exception {
- super.initialize();
+ public void setTaskScheduler(TaskScheduler taskScheduler) {
+ this.taskScheduler = taskScheduler;
+ }
+
+ public void afterPropertiesSet() {
this.trackedCorrelationIds = new ArrayBlockingQueue