From 9fc031e4f45e233a63e070cf079e76d905eb81d8 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 5 Sep 2008 19:22:10 +0000 Subject: [PATCH] The AbstractWebServiceHandler is now an endpoint instead of a MessageHandler implementation. The element has been replaced with , and it is now a "standalone" component (i.e. it is no longer necessary to provide its id as a reference within another separate element). --- .../samples/ws/temperatureConversion.xml | 15 ++-- .../ws/config/WebServiceHandlerParser.java | 6 ++ .../ws/config/spring-integration-ws-1.0.xsd | 6 +- .../ws/handler/AbstractWebServiceHandler.java | 4 +- .../META-INF/spring-integration.parsers | 2 +- .../config/WebServiceHandlerParserTests.java | 68 +++++++++---------- 6 files changed, 54 insertions(+), 47 deletions(-) diff --git a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/ws/temperatureConversion.xml b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/ws/temperatureConversion.xml index ed698c4749..cfcec298dc 100644 --- a/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/ws/temperatureConversion.xml +++ b/org.springframework.integration.samples/src/main/java/org/springframework/integration/samples/ws/temperatureConversion.xml @@ -11,15 +11,12 @@ - - - - - + + diff --git a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java index 156e6d1585..d288797bff 100644 --- a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java +++ b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/WebServiceHandlerParser.java @@ -56,6 +56,12 @@ public class WebServiceHandlerParser extends AbstractSingleBeanDefinitionParser throw new ConfigurationException("The 'uri' attribute is required."); } builder.addConstructorArgValue(uri); + String inputChannel = element.getAttribute("input-channel"); + builder.addPropertyReference("source", inputChannel); + String outputChannel = element.getAttribute("output-channel"); + if (StringUtils.hasText(outputChannel)) { + builder.addPropertyReference("outputChannel", outputChannel); + } String marshallerRef = element.getAttribute("marshaller"); if (StringUtils.hasText(marshallerRef)) { builder.addConstructorArgReference(marshallerRef); diff --git a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/spring-integration-ws-1.0.xsd b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/spring-integration-ws-1.0.xsd index 78bf3ad71f..19dd0925f9 100644 --- a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/spring-integration-ws-1.0.xsd +++ b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/config/spring-integration-ws-1.0.xsd @@ -19,14 +19,16 @@ ]]> - + - Defines a Web Service MessageHandler adapter. + Defines a Web Service based Service Activator endpoint. + + diff --git a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/handler/AbstractWebServiceHandler.java b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/handler/AbstractWebServiceHandler.java index abb55619d3..fb41e8165c 100644 --- a/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/handler/AbstractWebServiceHandler.java +++ b/org.springframework.integration.ws/src/main/java/org/springframework/integration/ws/handler/AbstractWebServiceHandler.java @@ -19,6 +19,7 @@ package org.springframework.integration.ws.handler; import java.io.IOException; import java.net.URI; +import org.springframework.integration.endpoint.AbstractInOutEndpoint; import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; @@ -36,7 +37,7 @@ import org.springframework.ws.soap.client.core.SoapActionCallback; * * @author Mark Fisher */ -public abstract class AbstractWebServiceHandler implements MessageHandler { +public abstract class AbstractWebServiceHandler extends AbstractInOutEndpoint { public static final String SOAP_ACTION_PROPERTY_KEY = "_ws.soapAction"; @@ -70,6 +71,7 @@ public abstract class AbstractWebServiceHandler implements MessageHandler { return this.webServiceTemplate; } + @Override public final Message handle(Message message) { Object responsePayload = this.doHandle(message.getPayload(), this.getRequestCallback(message)); return responsePayload != null ? new GenericMessage(responsePayload, message.getHeaders()) : null; diff --git a/org.springframework.integration.ws/src/main/resources/META-INF/spring-integration.parsers b/org.springframework.integration.ws/src/main/resources/META-INF/spring-integration.parsers index 091f968c3e..a7b5c85138 100644 --- a/org.springframework.integration.ws/src/main/resources/META-INF/spring-integration.parsers +++ b/org.springframework.integration.ws/src/main/resources/META-INF/spring-integration.parsers @@ -1 +1 @@ -ws-handler=org.springframework.integration.ws.config.WebServiceHandlerParser \ No newline at end of file +ws-service-activator=org.springframework.integration.ws.config.WebServiceHandlerParser \ No newline at end of file diff --git a/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java b/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java index e44ddee57d..8cd13b7db0 100644 --- a/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java +++ b/org.springframework.integration.ws/src/test/java/org/springframework/integration/ws/config/WebServiceHandlerParserTests.java @@ -23,7 +23,7 @@ import org.junit.Test; import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.handler.MessageHandler; +import org.springframework.integration.endpoint.MessageEndpoint; import org.springframework.integration.ws.handler.MarshallingWebServiceHandler; import org.springframework.integration.ws.handler.SimpleWebServiceHandler; import org.springframework.oxm.Marshaller; @@ -42,9 +42,9 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithDefaultSourceExtractor() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithDefaultSourceExtractor"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithDefaultSourceExtractor"); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); assertEquals("DefaultSourceExtractor", accessor.getPropertyValue("sourceExtractor").getClass().getSimpleName()); } @@ -52,9 +52,9 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithCustomSourceExtractor() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomSourceExtractor"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomSourceExtractor"); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); SourceExtractor sourceExtractor = (SourceExtractor) context.getBean("sourceExtractor"); assertEquals(sourceExtractor, accessor.getPropertyValue("sourceExtractor")); } @@ -63,9 +63,9 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithCustomRequestCallback() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomRequestCallback"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomRequestCallback"); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); WebServiceMessageCallback callback = (WebServiceMessageCallback) context.getBean("requestCallback"); assertEquals(callback, accessor.getPropertyValue("requestCallback")); } @@ -74,9 +74,9 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithCustomMessageFactory() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomMessageFactory"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomMessageFactory"); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate")); WebServiceMessageFactory factory = (WebServiceMessageFactory) context.getBean("messageFactory"); assertEquals(factory, accessor.getPropertyValue("messageFactory")); @@ -86,10 +86,10 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithCustomSourceExtractorAndMessageFactory() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomSourceExtractorAndMessageFactory"); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomSourceExtractorAndMessageFactory"); SourceExtractor sourceExtractor = (SourceExtractor) context.getBean("sourceExtractor"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); assertEquals(sourceExtractor, accessor.getPropertyValue("sourceExtractor")); accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate")); WebServiceMessageFactory factory = (WebServiceMessageFactory) context.getBean("messageFactory"); @@ -100,9 +100,9 @@ public class WebServiceHandlerParserTests { public void testSimpleWebServiceHandlerWithCustomFaultMessageResolver() { ApplicationContext context = new ClassPathXmlApplicationContext( "simpleWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomFaultMessageResolver"); - assertEquals(SimpleWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomFaultMessageResolver"); + assertEquals(SimpleWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); accessor = new DirectFieldAccessor(accessor.getPropertyValue("webServiceTemplate")); FaultMessageResolver resolver = (FaultMessageResolver) context.getBean("faultMessageResolver"); assertEquals(resolver, accessor.getPropertyValue("faultMessageResolver")); @@ -112,9 +112,9 @@ public class WebServiceHandlerParserTests { public void testWebServiceHandlerWithAllInOneMarshaller() { ApplicationContext context = new ClassPathXmlApplicationContext( "marshallingWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithAllInOneMarshaller"); - assertEquals(MarshallingWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithAllInOneMarshaller"); + assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint); DirectFieldAccessor templateAccessor = new DirectFieldAccessor( handlerAccessor.getPropertyValue("webServiceTemplate")); Marshaller marshaller = (Marshaller) context.getBean("marshallerAndUnmarshaller"); @@ -126,9 +126,9 @@ public class WebServiceHandlerParserTests { public void testWebServiceHandlerWithSeparateMarshallerAndUnmarshaller() { ApplicationContext context = new ClassPathXmlApplicationContext( "marshallingWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithSeparateMarshallerAndUnmarshaller"); - assertEquals(MarshallingWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithSeparateMarshallerAndUnmarshaller"); + assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint); DirectFieldAccessor templateAccessor = new DirectFieldAccessor( handlerAccessor.getPropertyValue("webServiceTemplate")); Marshaller marshaller = (Marshaller) context.getBean("marshaller"); @@ -141,9 +141,9 @@ public class WebServiceHandlerParserTests { public void testMarshallingWebServiceHandlerWithCustomRequestCallback() { ApplicationContext context = new ClassPathXmlApplicationContext( "marshallingWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithCustomRequestCallback"); - assertEquals(MarshallingWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor accessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithCustomRequestCallback"); + assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor accessor = new DirectFieldAccessor(endpoint); WebServiceMessageCallback callback = (WebServiceMessageCallback) context.getBean("requestCallback"); assertEquals(callback, accessor.getPropertyValue("requestCallback")); } @@ -152,9 +152,9 @@ public class WebServiceHandlerParserTests { public void testWebServiceHandlerWithAllInOneMarshallerAndMessageFactory() { ApplicationContext context = new ClassPathXmlApplicationContext( "marshallingWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithAllInOneMarshallerAndMessageFactory"); - assertEquals(MarshallingWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithAllInOneMarshallerAndMessageFactory"); + assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint); DirectFieldAccessor templateAccessor = new DirectFieldAccessor( handlerAccessor.getPropertyValue("webServiceTemplate")); Marshaller marshaller = (Marshaller) context.getBean("marshallerAndUnmarshaller"); @@ -168,9 +168,9 @@ public class WebServiceHandlerParserTests { public void testWebServiceHandlerWithSeparateMarshallerAndUnmarshallerAndMessageFactory() { ApplicationContext context = new ClassPathXmlApplicationContext( "marshallingWebServiceHandlerParserTests.xml", this.getClass()); - MessageHandler handler = (MessageHandler) context.getBean("handlerWithSeparateMarshallerAndUnmarshallerAndMessageFactory"); - assertEquals(MarshallingWebServiceHandler.class, handler.getClass()); - DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(handler); + MessageEndpoint endpoint = (MessageEndpoint) context.getBean("handlerWithSeparateMarshallerAndUnmarshallerAndMessageFactory"); + assertEquals(MarshallingWebServiceHandler.class, endpoint.getClass()); + DirectFieldAccessor handlerAccessor = new DirectFieldAccessor(endpoint); DirectFieldAccessor templateAccessor = new DirectFieldAccessor( handlerAccessor.getPropertyValue("webServiceTemplate")); Marshaller marshaller = (Marshaller) context.getBean("marshaller");