From 28de474db3dc84ff938d06e7e9a722b606298f48 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 3 Apr 2007 22:04:59 +0000 Subject: [PATCH] Added MessageMethodEndpointAdapter. --- .../adapter/MessageMethodEndpointAdapter.java | 48 ++++++++++++ .../MessageMethodEndpointAdapterTest.java | 74 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 sandbox/src/main/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapter.java create mode 100644 sandbox/src/test/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapterTest.java diff --git a/sandbox/src/main/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapter.java b/sandbox/src/main/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapter.java new file mode 100644 index 00000000..d22eb593 --- /dev/null +++ b/sandbox/src/main/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapter.java @@ -0,0 +1,48 @@ +/* + * Copyright 2007 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.ws.server.endpoint.adapter; + +import java.lang.reflect.Method; + +import org.springframework.ws.context.MessageContext; +import org.springframework.ws.server.endpoint.MethodEndpoint; + +/** + * Adapter that supports endpoint methods that use marshalling. Supports methods with the following signature: + *
+ * void handleMyMessage(MessageContext request);
+ * 
+ * I.e. methods that take a single {@link MessageContext} parameter, and return void. The method can have + * any name, as long as it is mapped by an {@link org.springframework.ws.server.EndpointMapping}. + * + * @author Arjen Poutsma + */ + +public class MessageMethodEndpointAdapter extends AbstractMethodEndpointAdapter { + + protected boolean supportsInternal(MethodEndpoint methodEndpoint) { + Method method = methodEndpoint.getMethod(); + return Void.TYPE.isAssignableFrom(method.getReturnType()) && method.getParameterTypes().length == 1 && + MessageContext.class.isAssignableFrom(method.getParameterTypes()[0]); + + } + + protected void invokeInternal(MessageContext messageContext, MethodEndpoint methodEndpoint) throws Exception { + methodEndpoint.invoke(new Object[]{messageContext}); + } + +} diff --git a/sandbox/src/test/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapterTest.java b/sandbox/src/test/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapterTest.java new file mode 100644 index 00000000..1f35f01f --- /dev/null +++ b/sandbox/src/test/java/org/springframework/ws/server/endpoint/adapter/MessageMethodEndpointAdapterTest.java @@ -0,0 +1,74 @@ +/* + * Copyright 2007 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.ws.server.endpoint.adapter; + +import java.lang.reflect.Method; + +import junit.framework.TestCase; +import org.springframework.ws.MockWebServiceMessageFactory; +import org.springframework.ws.context.DefaultMessageContext; +import org.springframework.ws.context.MessageContext; +import org.springframework.ws.server.endpoint.MethodEndpoint; + +public class MessageMethodEndpointAdapterTest extends TestCase { + + private MessageMethodEndpointAdapter adapter; + + private boolean supportedInvoked; + + private MessageContext messageContext; + + protected void setUp() throws Exception { + adapter = new MessageMethodEndpointAdapter(); + messageContext = new DefaultMessageContext(new MockWebServiceMessageFactory()); + } + + public void testSupported() throws NoSuchMethodException { + Method noResponse = getClass().getMethod("supported", new Class[]{MessageContext.class}); + MethodEndpoint methodEndpoint = new MethodEndpoint(this, noResponse); + assertTrue("Method unsupported", adapter.supportsInternal(methodEndpoint)); + } + + public void testUnsupportedMethodMultipleParams() throws NoSuchMethodException { + Method unsupported = getClass() + .getMethod("unsupportedMultipleParams", new Class[]{MessageContext.class, MessageContext.class}); + assertFalse("Method supported", adapter.supportsInternal(new MethodEndpoint(this, unsupported))); + } + + public void testUnsupportedMethodWrongParam() throws NoSuchMethodException { + Method unsupported = getClass().getMethod("unsupportedWrongParam", new Class[]{String.class}); + assertFalse("Method supported", adapter.supportsInternal(new MethodEndpoint(this, unsupported))); + } + + public void testInvokeSupported() throws Exception { + Method supported = getClass().getMethod("supported", new Class[]{MessageContext.class}); + MethodEndpoint methodEndpoint = new MethodEndpoint(this, supported); + assertFalse("Method invoked", supportedInvoked); + adapter.invoke(messageContext, methodEndpoint); + assertTrue("Method not invoked", supportedInvoked); + } + + public void supported(MessageContext context) { + supportedInvoked = true; + } + + public void unsupportedMultipleParams(MessageContext s1, MessageContext s2) { + } + + public void unsupportedWrongParam(String request) { + } +} \ No newline at end of file