diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java new file mode 100644 index 0000000000..95557f29d0 --- /dev/null +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/BridgeParser.java @@ -0,0 +1,37 @@ +/* + * 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.config.xml; + +import org.w3c.dom.Element; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.handler.BridgeHandler; + +/** + * Parser for the <bridge> element. + * + * @author Mark Fisher + */ +public class BridgeParser extends AbstractConsumerEndpointParser { + + @Override + protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { + return BeanDefinitionBuilder.genericBeanDefinition(BridgeHandler.class); + } + +} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java index 227e412bac..97a77742b8 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java @@ -109,6 +109,7 @@ public class IntegrationNamespaceHandler implements NamespaceHandler { registerBeanDefinitionParser("inbound-channel-adapter", new MethodInvokingInboundChannelAdapterParser()); registerBeanDefinitionParser("outbound-channel-adapter", new MethodInvokingOutboundChannelAdapterParser()); registerBeanDefinitionParser("gateway", new GatewayParser()); + registerBeanDefinitionParser("bridge", new BridgeParser()); registerBeanDefinitionParser("chain", new ChainParser()); registerBeanDefinitionParser("selector-chain", new SelectorChainParser()); registerBeanDefinitionParser("annotation-config", new AnnotationConfigParser()); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd index 223a297e46..1cba09b9b5 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd @@ -173,7 +173,7 @@ - + Defines an endpoint for exposing any bean reference as a service that receives @@ -185,6 +185,20 @@ + + + + Base type for Message-handling endpoints. + + + + + + + + + + @@ -214,7 +228,7 @@ - + @@ -246,6 +260,14 @@ + + + + Defines an endpoint that passes a Message to the output-channel without modifying it. + + + + @@ -475,7 +497,7 @@ - + Defines a Transformer. @@ -491,7 +513,7 @@ - + @@ -508,12 +530,14 @@ + + - + Defines a Splitter. @@ -529,7 +553,7 @@ - + @@ -551,7 +575,7 @@ - + diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessagingBridge.java b/org.springframework.integration/src/main/java/org/springframework/integration/handler/BridgeHandler.java similarity index 74% rename from org.springframework.integration/src/main/java/org/springframework/integration/handler/MessagingBridge.java rename to org.springframework.integration/src/main/java/org/springframework/integration/handler/BridgeHandler.java index 862397ef43..69ba41d4ea 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MessagingBridge.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/handler/BridgeHandler.java @@ -19,9 +19,14 @@ package org.springframework.integration.handler; import org.springframework.integration.core.Message; /** + * A simple MessageHandler implementation that passes the request Message + * directly to the output channel without modifying it. The main purpose of + * this handler is to bridge a PollableChannel to a SubscribableChannel or + * vice-versa. + * * @author Mark Fisher */ -public class MessagingBridge extends AbstractReplyProducingMessageHandler { +public class BridgeHandler extends AbstractReplyProducingMessageHandler { @Override protected void handleRequestMessage(Message requestMessage, ReplyMessageHolder replyMessageHolder) { diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests-context.xml new file mode 100644 index 0000000000..0986d63437 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests-context.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests.java new file mode 100644 index 0000000000..0671d85124 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/BridgeParserTests.java @@ -0,0 +1,71 @@ +/* + * 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.config.xml; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.integration.channel.PollableChannel; +import org.springframework.integration.core.Message; +import org.springframework.integration.core.MessageChannel; +import org.springframework.integration.message.StringMessage; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; + +/** + * @author Mark Fisher + */ +@ContextConfiguration +public class BridgeParserTests extends AbstractJUnit4SpringContextTests { + + @Autowired + @Qualifier("pollableChannel") + private PollableChannel pollableChannel; + + @Autowired + @Qualifier("subscribableChannel") + private MessageChannel subscribableChannel; + + @Autowired + @Qualifier("output1") + private PollableChannel output1; + + @Autowired + @Qualifier("output2") + private PollableChannel output2; + + + @Test + public void pollableChannel() { + Message message = new StringMessage("test1"); + this.pollableChannel.send(message); + Message reply = this.output1.receive(1000); + assertEquals(message, reply); + } + + @Test + public void subscribableChannel() { + Message message = new StringMessage("test2"); + this.subscribableChannel.send(message); + Message reply = this.output2.receive(0); + assertEquals(message, reply); + } + +}