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