The AbstractWebServiceHandler is now an endpoint instead of a MessageHandler implementation. The <ws-handler/> element has been replaced with <ws-service-activator/>, and it is now a "standalone" component (i.e. it is no longer necessary to provide its id as a reference within another separate <service-activator/> element).

This commit is contained in:
Mark Fisher
2008-09-05 19:22:10 +00:00
parent b2db1c0b16
commit 9fc031e4f4
6 changed files with 54 additions and 47 deletions

View File

@@ -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);

View File

@@ -19,14 +19,16 @@
]]></xsd:documentation>
</xsd:annotation>
<xsd:element name="ws-handler">
<xsd:element name="ws-service-activator">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Defines a Web Service MessageHandler adapter.
Defines a Web Service based Service Activator endpoint.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="input-channel" type="xsd:string" use="required"/>
<xsd:attribute name="output-channel" type="xsd:string"/>
<xsd:attribute name="uri" type="xsd:string" use="required"/>
<xsd:attribute name="marshaller" type="xsd:string"/>
<xsd:attribute name="unmarshaller" type="xsd:string"/>

View File

@@ -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<Object>(responsePayload, message.getHeaders()) : null;

View File

@@ -1 +1 @@
ws-handler=org.springframework.integration.ws.config.WebServiceHandlerParser
ws-service-activator=org.springframework.integration.ws.config.WebServiceHandlerParser

View File

@@ -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");