diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingHandler.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java similarity index 79% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingHandler.java rename to org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java index b572fe8e54..4442bbc9e1 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingHandler.java +++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingOutboundGateway.java @@ -18,26 +18,36 @@ package org.springframework.integration.adapter; import java.io.Serializable; +import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.endpoint.AbstractMessageHandlingEndpoint; import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.Message; import org.springframework.integration.message.MessageHandlingException; import org.springframework.remoting.RemoteAccessException; /** - * A base class for remoting {@link MessageHandler} adapters. + * A base class for outbound Messaging Gateways that use url-based remoting. * * @author Mark Fisher */ -public abstract class AbstractRemotingHandler implements MessageHandler { +public abstract class AbstractRemotingOutboundGateway extends AbstractMessageHandlingEndpoint { private final MessageHandler handlerProxy; - public AbstractRemotingHandler(String url) { + public AbstractRemotingOutboundGateway(String url) { this.handlerProxy = this.createHandlerProxy(url); } + public void setRequestChannel(MessageChannel requestChannel) { + this.setInputChannel(requestChannel); + } + + public void setReplyChannel(MessageChannel replyChannel) { + this.setOutputChannel(replyChannel); + } + /** * Subclasses must implement this method. It will be invoked from the constructor. */ diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingGateway.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/RemotingInboundGatewaySupport.java similarity index 81% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingGateway.java rename to org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/RemotingInboundGatewaySupport.java index a86c6313e1..b10c8d2006 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/AbstractRemotingGateway.java +++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/RemotingInboundGatewaySupport.java @@ -16,26 +16,20 @@ package org.springframework.integration.adapter; -import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.gateway.SimpleMessagingGateway; import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.Message; /** - * Base class for gateway adapters. + * Support class for inbound Messaging Gateways. * * @author Mark Fisher */ -public abstract class AbstractRemotingGateway extends SimpleMessagingGateway implements MessageHandler { +public abstract class RemotingInboundGatewaySupport extends SimpleMessagingGateway implements MessageHandler { private volatile boolean expectReply = true; - public AbstractRemotingGateway(MessageChannel requestChannel) { - super(requestChannel); - } - - /** * Specify whether the gateway should be expected to return a reply. * The default is 'true'. 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 4845da0f7a..892d881217 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 @@ -56,12 +56,12 @@ public abstract class AbstractRemotingGatewayParser extends AbstractSimpleBeanDe } @Override - protected void postProcess(BeanDefinitionBuilder builder, Element element) { + protected final void postProcess(BeanDefinitionBuilder builder, Element element) { String requestChannelRef = element.getAttribute("request-channel"); if (!StringUtils.hasText(requestChannelRef)) { throw new ConfigurationException("a 'request-channel' reference is required"); } - builder.addConstructorArgReference(requestChannelRef); + builder.addPropertyReference("requestChannel", requestChannelRef); String replyChannel = element.getAttribute("reply-channel"); if (StringUtils.hasText(replyChannel)) { builder.addPropertyReference("replyChannel", replyChannel); diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingHandlerParser.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java similarity index 71% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingHandlerParser.java rename to org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java index 3fd5d67fae..570bd540c2 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingHandlerParser.java +++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/AbstractRemotingOutboundGatewayParser.java @@ -19,29 +19,15 @@ package org.springframework.integration.adapter.config; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; import org.springframework.integration.ConfigurationException; import org.springframework.util.StringUtils; /** - * Base class for remoting MessageHandler parsers. + * Base class for url-based remoting outbound gateway parsers. * * @author Mark Fisher */ -public abstract class AbstractRemotingHandlerParser extends AbstractSimpleBeanDefinitionParser { - - protected abstract Class getBeanClass(Element element); - - - @Override - protected boolean shouldGenerateId() { - return false; - } - - @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } +public abstract class AbstractRemotingOutboundGatewayParser extends AbstractRemotingGatewayParser { @Override protected boolean isEligibleAttribute(String attributeName) { @@ -49,7 +35,7 @@ public abstract class AbstractRemotingHandlerParser extends AbstractSimpleBeanDe } @Override - protected void postProcess(BeanDefinitionBuilder builder, Element element) { + protected void doPostProcess(BeanDefinitionBuilder builder, Element element) { String url = element.getAttribute("url"); if (!StringUtils.hasText(url)) { throw new ConfigurationException("The 'url' attribute is required."); diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd index 98ba17c6d8..b24d0508b1 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd +++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd @@ -65,57 +65,6 @@ - - - - - Defines an RMI-based gateway adapter. - - - - - - - - - - - - - - - - - Defines an RMI-based MessageHandler adapter. - - - - - - - - - - - - - Defines an HttpInvoker-based gateway adapter. - - - - - - - - - Defines an HttpInvoker-based MessageHandler adapter. - - - - - - - @@ -159,21 +108,6 @@ - - - - Defines common configuration for gateway adapters. - - - - - - - - - - - diff --git a/org.springframework.integration.adapter/src/main/resources/META-INF/spring-integration.parsers b/org.springframework.integration.adapter/src/main/resources/META-INF/spring-integration.parsers index 0d0ab6afc7..1d6b1f206b 100644 --- a/org.springframework.integration.adapter/src/main/resources/META-INF/spring-integration.parsers +++ b/org.springframework.integration.adapter/src/main/resources/META-INF/spring-integration.parsers @@ -1,8 +1,6 @@ file-source=org.springframework.integration.adapter.file.config.FileSourceParser file-target=org.springframework.integration.adapter.file.config.FileTargetParser ftp-source=org.springframework.integration.adapter.ftp.config.FtpSourceParser -httpinvoker-gateway=org.springframework.integration.adapter.httpinvoker.config.HttpInvokerGatewayParser -httpinvoker-handler=org.springframework.integration.adapter.httpinvoker.config.HttpInvokerHandlerParser mail-target=org.springframework.integration.adapter.mail.config.MailTargetParser polling-mail-source=org.springframework.integration.adapter.mail.config.PollingMailSourceParser imap-idle-mail-source=org.springframework.integration.adapter.mail.config.SubscribableImapIdleMailSourceParser diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerHandlerParserTests.xml b/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerHandlerParserTests.xml deleted file mode 100644 index 6d6dc910c0..0000000000 --- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerHandlerParserTests.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGateway.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGateway.java similarity index 85% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGateway.java rename to org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGateway.java index ffef079bc0..18994b9488 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGateway.java +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGateway.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker; +package org.springframework.integration.httpinvoker; import java.io.IOException; @@ -23,15 +23,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.InitializingBean; -import org.springframework.integration.adapter.AbstractRemotingGateway; -import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.adapter.RemotingInboundGatewaySupport; import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.MessagingException; import org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter; import org.springframework.web.HttpRequestHandler; /** - * A gateway adapter for HttpInvoker-based remoting. Since this class implements + * An inbound gateway adapter for HttpInvoker-based remoting. Since this class implements * {@link HttpRequestHandler}, it can be configured with a delegating Servlet where the * servlet-name matches this adapter's bean name. For example, the following servlet can * be defined in web.xml: @@ -60,16 +59,11 @@ import org.springframework.web.HttpRequestHandler; * * @author Mark Fisher */ -public class HttpInvokerGateway extends AbstractRemotingGateway implements HttpRequestHandler, InitializingBean { +public class HttpInvokerInboundGateway extends RemotingInboundGatewaySupport implements HttpRequestHandler, InitializingBean { private volatile HttpInvokerServiceExporter exporter; - public HttpInvokerGateway(MessageChannel requestChannel) { - super(requestChannel); - } - - public void afterPropertiesSet() { HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter(); exporter.setService(this); diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerHandler.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerOutboundGateway.java similarity index 82% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerHandler.java rename to org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerOutboundGateway.java index cc52d59cd2..4545dbb6b1 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerHandler.java +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/HttpInvokerOutboundGateway.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker; +package org.springframework.integration.httpinvoker; -import org.springframework.integration.adapter.AbstractRemotingHandler; +import org.springframework.integration.adapter.AbstractRemotingOutboundGateway; import org.springframework.integration.handler.MessageHandler; import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; @@ -25,9 +25,9 @@ import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; * * @author Mark Fisher */ -public class HttpInvokerHandler extends AbstractRemotingHandler { +public class HttpInvokerOutboundGateway extends AbstractRemotingOutboundGateway { - public HttpInvokerHandler(String url) { + public HttpInvokerOutboundGateway(String url) { super(url); } diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParser.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParser.java similarity index 77% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParser.java rename to org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParser.java index a9ff9152f3..bf10eba35e 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParser.java +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParser.java @@ -14,23 +14,23 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker.config; +package org.springframework.integration.httpinvoker.config; import org.w3c.dom.Element; import org.springframework.integration.adapter.config.AbstractRemotingGatewayParser; -import org.springframework.integration.adapter.httpinvoker.HttpInvokerGateway; +import org.springframework.integration.httpinvoker.HttpInvokerInboundGateway; /** * Parser for the <httpinvoker-gateway/> element. * * @author Mark Fisher */ -public class HttpInvokerGatewayParser extends AbstractRemotingGatewayParser { +public class HttpInvokerInboundGatewayParser extends AbstractRemotingGatewayParser { @Override protected Class getBeanClass(Element element) { - return HttpInvokerGateway.class; + return HttpInvokerInboundGateway.class; } } diff --git a/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerNamespaceHandler.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerNamespaceHandler.java new file mode 100644 index 0000000000..2490b46671 --- /dev/null +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerNamespaceHandler.java @@ -0,0 +1,33 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.httpinvoker.config; + +import org.springframework.beans.factory.xml.NamespaceHandlerSupport; + +/** + * Namespace handler for Spring Integration's httpinvoker namespace. + * + * @author Mark Fisher + */ +public class HttpInvokerNamespaceHandler extends NamespaceHandlerSupport { + + public void init() { + this.registerBeanDefinitionParser("inbound-gateway", new HttpInvokerInboundGatewayParser()); + this.registerBeanDefinitionParser("outbound-gateway", new HttpInvokerOutboundGatewayParser()); + } + +} diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParser.java b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java similarity index 67% rename from org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParser.java rename to org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java index b45fae3bf1..17bcd4e806 100644 --- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParser.java +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParser.java @@ -14,23 +14,23 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker.config; +package org.springframework.integration.httpinvoker.config; import org.w3c.dom.Element; -import org.springframework.integration.adapter.config.AbstractRemotingHandlerParser; -import org.springframework.integration.adapter.httpinvoker.HttpInvokerHandler; +import org.springframework.integration.adapter.config.AbstractRemotingOutboundGatewayParser; +import org.springframework.integration.httpinvoker.HttpInvokerOutboundGateway; /** - * Parser for the <httpinvoker-handler/> element. + * Parser for the <outbound-gateway/> element of the 'httpinvoker' namespace. * * @author Mark Fisher */ -public class HttpInvokerHandlerParser extends AbstractRemotingHandlerParser { +public class HttpInvokerOutboundGatewayParser extends AbstractRemotingOutboundGatewayParser { @Override protected Class getBeanClass(Element element) { - return HttpInvokerHandler.class; + return HttpInvokerOutboundGateway.class; } } diff --git a/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/spring-integration-httpinvoker-1.0.xsd b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/spring-integration-httpinvoker-1.0.xsd new file mode 100644 index 0000000000..8af9d305d7 --- /dev/null +++ b/org.springframework.integration.httpinvoker/src/main/java/org/springframework/integration/httpinvoker/config/spring-integration-httpinvoker-1.0.xsd @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + Defines an HttpInvoker-based inbound Messaging Gateway. + + + + + + + + + + + + + + + Defines an HttpInvoker-based outbound Messaging Gateway. + + + + + + + + + + + + + + Defines common configuration for gateway adapters. + + + + + + + + + + + \ No newline at end of file diff --git a/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.handlers b/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.handlers new file mode 100644 index 0000000000..c77f3fddf1 --- /dev/null +++ b/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.handlers @@ -0,0 +1 @@ +http\://www.springframework.org/schema/integration/httpinvoker=org.springframework.integration.httpinvoker.config.HttpInvokerNamespaceHandler \ No newline at end of file diff --git a/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.schemas b/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.schemas new file mode 100644 index 0000000000..ae9f619498 --- /dev/null +++ b/org.springframework.integration.httpinvoker/src/main/resources/META-INF/spring.schemas @@ -0,0 +1 @@ +http\://www.springframework.org/schema/integration/httpinvoker/spring-integration-httpinvoker-1.0.xsd=org/springframework/integration/httpinvoker/config/spring-integration-httpinvoker-1.0.xsd \ No newline at end of file diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGatewayTests.java b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGatewayTests.java similarity index 90% rename from org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGatewayTests.java rename to org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGatewayTests.java index f168ec385c..850c20b100 100644 --- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/HttpInvokerGatewayTests.java +++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/HttpInvokerInboundGatewayTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker; +package org.springframework.integration.httpinvoker; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -31,6 +31,7 @@ import org.junit.Test; import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.httpinvoker.HttpInvokerInboundGateway; import org.springframework.integration.message.Message; import org.springframework.integration.message.StringMessage; import org.springframework.mock.web.MockHttpServletRequest; @@ -41,12 +42,13 @@ import org.springframework.remoting.support.RemoteInvocationResult; /** * @author Mark Fisher */ -public class HttpInvokerGatewayTests { +public class HttpInvokerInboundGatewayTests { @Test public void testRequestOnly() throws Exception { QueueChannel channel = new QueueChannel(); - HttpInvokerGateway gateway = new HttpInvokerGateway(channel); + HttpInvokerInboundGateway gateway = new HttpInvokerInboundGateway(); + gateway.setRequestChannel(channel); gateway.setExpectReply(false); gateway.afterPropertiesSet(); MockHttpServletRequest request = new MockHttpServletRequest(); @@ -68,7 +70,8 @@ public class HttpInvokerGatewayTests { replyChannel.send(new StringMessage(message.getPayload().toString().toUpperCase())); } }); - HttpInvokerGateway gateway = new HttpInvokerGateway(channel); + HttpInvokerInboundGateway gateway = new HttpInvokerInboundGateway(); + gateway.setRequestChannel(channel); gateway.setExpectReply(true); gateway.afterPropertiesSet(); MockHttpServletRequest request = new MockHttpServletRequest(); diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParserTests.java b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParserTests.java similarity index 78% rename from org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParserTests.java rename to org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParserTests.java index 538559f3f3..1c66ad26a5 100644 --- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerGatewayParserTests.java +++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerInboundGatewayParserTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker.config; +package org.springframework.integration.httpinvoker.config; import static org.junit.Assert.assertEquals; @@ -23,21 +23,21 @@ import org.junit.Test; import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.adapter.httpinvoker.HttpInvokerGateway; import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.httpinvoker.HttpInvokerInboundGateway; import org.springframework.integration.message.MessageChannelTemplate; /** * @author Mark Fisher */ -public class HttpInvokerGatewayParserTests { +public class HttpInvokerInboundGatewayParserTests { @Test - public void testAdapterWithDefaults() { + public void gatewayWithDefaults() { ApplicationContext context = new ClassPathXmlApplicationContext( - "httpInvokerGatewayParserTests.xml", this.getClass()); + "httpInvokerInboundGatewayParserTests.xml", this.getClass()); MessageChannel channel = (MessageChannel) context.getBean("testChannel"); - HttpInvokerGateway gateway = (HttpInvokerGateway) context.getBean("gatewayWithDefaults"); + HttpInvokerInboundGateway gateway = (HttpInvokerInboundGateway) context.getBean("gatewayWithDefaults"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); assertEquals(true, accessor.getPropertyValue("expectReply")); assertEquals(channel, accessor.getPropertyValue("requestChannel")); @@ -49,11 +49,11 @@ public class HttpInvokerGatewayParserTests { } @Test - public void testAdapterWithName() { + public void gatewayWithName() { ApplicationContext context = new ClassPathXmlApplicationContext( - "httpInvokerGatewayParserTests.xml", this.getClass()); + "httpInvokerInboundGatewayParserTests.xml", this.getClass()); MessageChannel channel = (MessageChannel) context.getBean("testChannel"); - HttpInvokerGateway gateway = (HttpInvokerGateway) context.getBean("/gateway/with/name"); + HttpInvokerInboundGateway gateway = (HttpInvokerInboundGateway) context.getBean("/gateway/with/name"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); assertEquals(true, accessor.getPropertyValue("expectReply")); assertEquals(channel, accessor.getPropertyValue("requestChannel")); @@ -65,11 +65,11 @@ public class HttpInvokerGatewayParserTests { } @Test - public void testAdapterWithCustomProperties() { + public void gatewayWithCustomProperties() { ApplicationContext context = new ClassPathXmlApplicationContext( - "httpInvokerGatewayParserTests.xml", this.getClass()); + "httpInvokerInboundGatewayParserTests.xml", this.getClass()); MessageChannel channel = (MessageChannel) context.getBean("testChannel"); - HttpInvokerGateway gateway = (HttpInvokerGateway) context.getBean("gatewayWithCustomProperties"); + HttpInvokerInboundGateway gateway = (HttpInvokerInboundGateway) context.getBean("gatewayWithCustomProperties"); DirectFieldAccessor accessor = new DirectFieldAccessor(gateway); assertEquals(false, accessor.getPropertyValue("expectReply")); assertEquals(channel, accessor.getPropertyValue("requestChannel")); diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParserTests.java b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java similarity index 65% rename from org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParserTests.java rename to org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java index 49b7ce9a90..89191765bb 100644 --- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/HttpInvokerHandlerParserTests.java +++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/HttpInvokerOutboundGatewayParserTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.integration.adapter.httpinvoker.config; +package org.springframework.integration.httpinvoker.config; import static org.junit.Assert.assertEquals; @@ -22,19 +22,19 @@ import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.adapter.httpinvoker.HttpInvokerHandler; -import org.springframework.integration.handler.MessageHandler; +import org.springframework.integration.httpinvoker.HttpInvokerOutboundGateway; /** * @author Mark Fisher */ -public class HttpInvokerHandlerParserTests { +public class HttpInvokerOutboundGatewayParserTests { @Test - public void testHttpInvokerHandlerParser() { - ApplicationContext context = new ClassPathXmlApplicationContext("httpInvokerHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handler"); - assertEquals(HttpInvokerHandler.class, handler.getClass()); + public void testHttpInvokerOutboundGatewayParser() { + ApplicationContext context = new ClassPathXmlApplicationContext( + "httpInvokerOutboundGatewayParserTests.xml", this.getClass()); + Object gateway = context.getBean("gateway"); + assertEquals(HttpInvokerOutboundGateway.class, gateway.getClass()); } } diff --git a/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerInboundGatewayParserTests.xml b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerInboundGatewayParserTests.xml new file mode 100644 index 0000000000..994dde0bde --- /dev/null +++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerInboundGatewayParserTests.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerGatewayParserTests.xml b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerOutboundGatewayParserTests.xml similarity index 58% rename from org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerGatewayParserTests.xml rename to org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerOutboundGatewayParserTests.xml index e30478d248..1a96b67206 100644 --- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/httpinvoker/config/httpInvokerGatewayParserTests.xml +++ b/org.springframework.integration.httpinvoker/src/test/java/org/springframework/integration/httpinvoker/config/httpInvokerOutboundGatewayParserTests.xml @@ -2,21 +2,18 @@ + http://www.springframework.org/schema/integration/spring-integration-1.0.xsd + http://www.springframework.org/schema/integration/httpinvoker + http://www.springframework.org/schema/integration/httpinvoker/spring-integration-httpinvoker-1.0.xsd"> - - - - - + \ No newline at end of file diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiGateway.java b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiGateway.java index c124aea0af..840b46b004 100644 --- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiGateway.java +++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiGateway.java @@ -19,8 +19,7 @@ package org.springframework.integration.rmi; import java.rmi.RemoteException; import java.rmi.registry.Registry; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.integration.adapter.AbstractRemotingGateway; +import org.springframework.integration.adapter.RemotingInboundGatewaySupport; import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.handler.MessageHandler; import org.springframework.remoting.rmi.RmiServiceExporter; @@ -33,12 +32,12 @@ import org.springframework.util.StringUtils; * * @author Mark Fisher */ -public class RmiGateway extends AbstractRemotingGateway implements InitializingBean, MessageHandler { +public class RmiGateway extends RemotingInboundGatewaySupport implements MessageHandler { public static final String SERVICE_NAME_PREFIX = "org.springframewok.integration.rmiGateway."; - private final String requestChannelName; + private volatile String requestChannelName; private volatile String registryHost; @@ -48,15 +47,15 @@ public class RmiGateway extends AbstractRemotingGateway implements InitializingB /** - * Create an RmiGateway that sends to the provided request channel. - * - * @param requestChannel the channel where messages will be sent, must not be - * null. + * Specify the request channel where messages will be sent. + * It must not be null, and it must have a name. */ - public RmiGateway(MessageChannel requestChannel) { - super(requestChannel); + @Override + public void setRequestChannel(MessageChannel requestChannel) { + Assert.notNull(requestChannel, "requestChannel must not be null"); + Assert.isTrue(StringUtils.hasText(requestChannel.getName()), "RmiGateway's request channel must have a name."); this.requestChannelName = requestChannel.getName(); - Assert.isTrue(StringUtils.hasText(this.requestChannelName), "RmiGateway's request channel must have a name."); + super.setRequestChannel(requestChannel); } @@ -72,6 +71,7 @@ public class RmiGateway extends AbstractRemotingGateway implements InitializingB this.remoteInvocationExecutor = remoteInvocationExecutor; } + @Override public void afterPropertiesSet() throws RemoteException { RmiServiceExporter exporter = new RmiServiceExporter(); if (this.registryHost != null) { diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiHandler.java b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiHandler.java index 93761d9c5b..19a25271b5 100644 --- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiHandler.java +++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/RmiHandler.java @@ -16,7 +16,7 @@ package org.springframework.integration.rmi; -import org.springframework.integration.adapter.AbstractRemotingHandler; +import org.springframework.integration.adapter.AbstractRemotingOutboundGateway; import org.springframework.integration.handler.MessageHandler; import org.springframework.remoting.rmi.RmiProxyFactoryBean; @@ -25,7 +25,7 @@ import org.springframework.remoting.rmi.RmiProxyFactoryBean; * * @author Mark Fisher */ -public class RmiHandler extends AbstractRemotingHandler { +public class RmiHandler extends AbstractRemotingOutboundGateway { public RmiHandler(String url) { super(url); diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiHandlerParser.java b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiHandlerParser.java index 54e3aca42e..6de25a120d 100644 --- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiHandlerParser.java +++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiHandlerParser.java @@ -21,18 +21,18 @@ import java.rmi.registry.Registry; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.integration.ConfigurationException; +import org.springframework.integration.adapter.config.AbstractRemotingOutboundGatewayParser; import org.springframework.integration.rmi.RmiGateway; import org.springframework.integration.rmi.RmiHandler; import org.springframework.util.StringUtils; /** - * Parser for the <rmi-handler/> element. + * Parser for the <outbound-gateway/> element of the 'rmi' namespace. * * @author Mark Fisher */ -public class RmiHandlerParser extends AbstractSingleBeanDefinitionParser { +public class RmiHandlerParser extends AbstractRemotingOutboundGatewayParser { @Override protected Class getBeanClass(Element element) { @@ -40,17 +40,15 @@ public class RmiHandlerParser extends AbstractSingleBeanDefinitionParser { } @Override - protected boolean shouldGenerateId() { - return false; + protected boolean isEligibleAttribute(String attributeName) { + return !"host".equals(attributeName) + && !"port".equals(attributeName) + && !"remote-channel".equals(attributeName) + && super.isEligibleAttribute(attributeName); } @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - @Override - protected void doParse(Element element, BeanDefinitionBuilder builder) { + protected void doPostProcess(BeanDefinitionBuilder builder, Element element) { String host = element.getAttribute("host"); String remoteChannel = element.getAttribute("remote-channel"); if (!(StringUtils.hasText(host) && StringUtils.hasText(remoteChannel))) { diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiNamespaceHandler.java b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiNamespaceHandler.java index 04b3a20cb0..80db6f5fd1 100644 --- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiNamespaceHandler.java +++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/RmiNamespaceHandler.java @@ -26,8 +26,8 @@ import org.springframework.beans.factory.xml.NamespaceHandlerSupport; public class RmiNamespaceHandler extends NamespaceHandlerSupport { public void init() { - this.registerBeanDefinitionParser("rmi-gateway", new RmiGatewayParser()); - this.registerBeanDefinitionParser("rmi-handler", new RmiHandlerParser()); + this.registerBeanDefinitionParser("inbound-gateway", new RmiGatewayParser()); + this.registerBeanDefinitionParser("outbound-gateway", new RmiHandlerParser()); } } diff --git a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/spring-integration-rmi-1.0.xsd b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/spring-integration-rmi-1.0.xsd index 302f7b0b63..136cc65ff3 100644 --- a/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/spring-integration-rmi-1.0.xsd +++ b/org.springframework.integration.rmi/src/main/java/org/springframework/integration/rmi/config/spring-integration-rmi-1.0.xsd @@ -16,38 +16,53 @@ ]]> - + - Defines an RMI-based gateway adapter. + Defines an RMI-based inbound MessagingGateway. - - - - - - - - - - + + + + + + + + - + - Defines an RMI-based MessageHandler adapter. + Defines an RMI-based outbound Messaging Gateway. - - - - + + + + + + + + + + + Defines common configuration for gateway adapters. + + + + + + + + + + \ No newline at end of file diff --git a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiHandlerParserTests.java b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiHandlerParserTests.java index 65c714d980..c877609e73 100644 --- a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiHandlerParserTests.java +++ b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/RmiHandlerParserTests.java @@ -42,7 +42,8 @@ public class RmiHandlerParserTests { @Before public void exportRemoteHandler() throws Exception { testChannel.setBeanName("testChannel"); - RmiGateway gateway = new RmiGateway(testChannel); + RmiGateway gateway = new RmiGateway(); + gateway.setRequestChannel(testChannel); gateway.setExpectReply(false); gateway.afterPropertiesSet(); } @@ -50,7 +51,7 @@ public class RmiHandlerParserTests { @Test public void testRmiHandlerDirectly() { ApplicationContext context = new ClassPathXmlApplicationContext("rmiHandlerParserTests.xml", this.getClass()); - RmiHandler handler = (RmiHandler) context.getBean("handler"); + RmiHandler handler = (RmiHandler) context.getBean("gateway"); handler.handle(new StringMessage("test")); Message result = testChannel.receive(1000); assertNotNull(result); diff --git a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiGatewayParserTests.xml b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiGatewayParserTests.xml index 531deb890e..9a3cffa125 100644 --- a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiGatewayParserTests.xml +++ b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiGatewayParserTests.xml @@ -14,16 +14,16 @@ - + - - + - + - + diff --git a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiHandlerParserTests.xml b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiHandlerParserTests.xml index ec41b53ab8..dca1471a2e 100644 --- a/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiHandlerParserTests.xml +++ b/org.springframework.integration.rmi/src/test/java/org/springframework/integration/rmi/config/rmiHandlerParserTests.xml @@ -14,8 +14,6 @@ - - - + \ No newline at end of file