Added MessageMethodEndpointAdapter.

This commit is contained in:
Arjen Poutsma
2007-04-03 22:04:59 +00:00
parent 956fb906d9
commit 28de474db3
2 changed files with 122 additions and 0 deletions

View File

@@ -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:
* <pre>
* void handleMyMessage(MessageContext request);
* </pre>
* I.e. methods that take a single {@link MessageContext} parameter, and return <code>void</code>. 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});
}
}

View File

@@ -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) {
}
}