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