Working on client-side stuff.
This commit is contained in:
@@ -24,6 +24,7 @@ import org.springframework.ws.WebServiceMessage;
|
||||
|
||||
/**
|
||||
* @author Arjen Poutsma
|
||||
* @see org.springframework.ws.client.WebServiceTemplate
|
||||
*/
|
||||
public interface WebServiceOperations {
|
||||
|
||||
@@ -37,15 +38,30 @@ public interface WebServiceOperations {
|
||||
Source sendAndReceive(Source requestPayload) throws IOException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload, marshalled by the configured
|
||||
* <code>Marshaller</code>. Returns the unmarshalled payload of the response message, if any.
|
||||
* Sends a web service message that contains the given payload. Writes the response, if any, to the given {@link
|
||||
* Result}.
|
||||
*
|
||||
* @param requestPayload the payload of the request message
|
||||
* @param responseResult the result to write the response payload to
|
||||
* @return <code>true</code> if a response was received; <code>false</code> otherwise
|
||||
*/
|
||||
boolean sendAndReceive(Source requestPayload, Result responseResult) throws IOException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload, marshalled by the configured {@link
|
||||
* org.springframework.oxm.Marshaller}. Returns the unmarshalled payload of the response message, if any.
|
||||
*
|
||||
* @param requestPayload the object to marshal into the request message payload
|
||||
* @return the unmarshalled payload of the response message, or <code>null</code> if no response is given
|
||||
*/
|
||||
Object marshalAndSend(Object requestPayload) throws IOException;
|
||||
Object sendAndReceive(Object requestPayload) throws IOException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that can be manipulated with the given callback. Returns the response message, if
|
||||
* any.
|
||||
*
|
||||
* @param callback the callback to be used for manipulating the request message
|
||||
* @return the response message, or <code>null</code> if no response is given
|
||||
*/
|
||||
WebServiceMessage sendAndReceive(WebServiceMessageCallback callback) throws IOException;
|
||||
|
||||
void sendAndReceive(Source requestPayload, Result result) throws IOException;
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
this.unmarshaller = unmarshaller;
|
||||
}
|
||||
|
||||
public Object marshalAndSend(final Object requestPayload) throws IOException {
|
||||
public Object sendAndReceive(final Object requestPayload) throws IOException {
|
||||
checkMarshallerAndUnmarshaller();
|
||||
WebServiceMessage response = sendAndReceive(new WebServiceMessageCallback() {
|
||||
|
||||
@@ -80,21 +80,25 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
}
|
||||
}
|
||||
|
||||
public void sendAndReceive(final Source requestPayload, Result result) throws IOException {
|
||||
public boolean sendAndReceive(final Source requestPayload, Result result) throws IOException {
|
||||
Source responsePayload = sendAndReceive(requestPayload);
|
||||
if (responsePayload != null) {
|
||||
try {
|
||||
Transformer transformer = createTransformer();
|
||||
transformer.transform(responsePayload, result);
|
||||
return true;
|
||||
}
|
||||
catch (TransformerException e) {
|
||||
throw new WebServiceClientException("Could not transform payload of responsePayload message");
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Source sendAndReceive(final Source requestPayload) throws IOException {
|
||||
return (Source) sendAndReceive(new WebServiceMessageCallback() {
|
||||
WebServiceMessage response = sendAndReceive(new WebServiceMessageCallback() {
|
||||
public void doInMessage(WebServiceMessage message) {
|
||||
try {
|
||||
Transformer transformer = createTransformer();
|
||||
@@ -105,6 +109,7 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
}
|
||||
}
|
||||
});
|
||||
return response != null ? response.getPayloadSource() : null;
|
||||
}
|
||||
|
||||
public WebServiceMessage sendAndReceive(WebServiceMessageCallback requestCallback) throws IOException {
|
||||
|
||||
@@ -17,13 +17,19 @@
|
||||
package org.springframework.ws.client;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.easymock.MockControl;
|
||||
import org.springframework.oxm.Marshaller;
|
||||
import org.springframework.oxm.Unmarshaller;
|
||||
import org.springframework.ws.WebServiceMessage;
|
||||
import org.springframework.ws.WebServiceMessageFactory;
|
||||
import org.springframework.ws.context.MessageContext;
|
||||
import org.springframework.ws.transport.WebServiceMessageSender;
|
||||
import org.springframework.xml.transform.StringResult;
|
||||
import org.springframework.xml.transform.StringSource;
|
||||
|
||||
public class WebServiceTemplateTest extends TestCase {
|
||||
|
||||
@@ -53,7 +59,7 @@ public class WebServiceTemplateTest extends TestCase {
|
||||
template.setMarshaller(null);
|
||||
replayMockControls();
|
||||
try {
|
||||
template.marshalAndSend(new Object());
|
||||
template.sendAndReceive(new Object());
|
||||
fail("IllegalStateException expected");
|
||||
}
|
||||
catch (IllegalStateException ex) {
|
||||
@@ -66,7 +72,7 @@ public class WebServiceTemplateTest extends TestCase {
|
||||
template.setUnmarshaller(null);
|
||||
replayMockControls();
|
||||
try {
|
||||
template.marshalAndSend(new Object());
|
||||
template.sendAndReceive(new Object());
|
||||
fail("IllegalStateException expected");
|
||||
}
|
||||
catch (IllegalStateException ex) {
|
||||
@@ -78,23 +84,110 @@ public class WebServiceTemplateTest extends TestCase {
|
||||
public void testSendAndReceiveMessageResponse() throws Exception {
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), responseMock);
|
||||
template.setMessageSender(new WebServiceMessageSender() {
|
||||
|
||||
public void sendAndReceive(MessageContext messageContext) throws IOException {
|
||||
assertEquals("Invalid request message", requestMock, messageContext.getRequest());
|
||||
messageContext.getResponse();
|
||||
}
|
||||
});
|
||||
template.setMessageSender(new ResponseMessageSender());
|
||||
replayMockControls();
|
||||
WebServiceMessage response = template.sendAndReceive(new WebServiceMessageCallback() {
|
||||
public void doInMessage(WebServiceMessage message) throws IOException {
|
||||
assertEquals("Invalid request message", requestMock, message);
|
||||
}
|
||||
});
|
||||
assertEquals("No response", responseMock, response);
|
||||
assertEquals("Invalid response", responseMock, response);
|
||||
verifyMockControls();
|
||||
}
|
||||
|
||||
public void testSendAndReceiveMessageNoResponse() throws Exception {
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
template.setMessageSender(new NoResponseMessageSender());
|
||||
replayMockControls();
|
||||
WebServiceMessage response = template.sendAndReceive(new WebServiceMessageCallback() {
|
||||
public void doInMessage(WebServiceMessage message) throws IOException {
|
||||
assertEquals("Invalid request message", requestMock, message);
|
||||
}
|
||||
});
|
||||
assertNull("No response", response);
|
||||
verifyMockControls();
|
||||
}
|
||||
|
||||
public void testSendAndReceiveSourceResponse() throws Exception {
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), responseMock);
|
||||
messageControl.expectAndReturn(requestMock.getPayloadResult(), new StringResult());
|
||||
Source expected = new StringSource("<response/>");
|
||||
messageControl.expectAndReturn(responseMock.getPayloadSource(), expected);
|
||||
template.setMessageSender(new ResponseMessageSender());
|
||||
replayMockControls();
|
||||
Source response = template.sendAndReceive(new StringSource("<request />"));
|
||||
assertEquals("Invalid response", expected, response);
|
||||
}
|
||||
|
||||
public void testSendAndReceiveSourceNoResponse() throws Exception {
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
messageControl.expectAndReturn(requestMock.getPayloadResult(), new StringResult());
|
||||
template.setMessageSender(new NoResponseMessageSender());
|
||||
replayMockControls();
|
||||
Source response = template.sendAndReceive(new StringSource("<request />"));
|
||||
assertNull("Invalid response", response);
|
||||
}
|
||||
|
||||
public void testSendAndReceiveMarshallResponse() throws Exception {
|
||||
template.setMessageSender(new ResponseMessageSender());
|
||||
MockControl marshallerControl = MockControl.createControl(Marshaller.class);
|
||||
Marshaller marshallerMock = (Marshaller) marshallerControl.getMock();
|
||||
template.setMarshaller(marshallerMock);
|
||||
MockControl unmarshallerControl = MockControl.createControl(Unmarshaller.class);
|
||||
Unmarshaller unmarshallerMock = (Unmarshaller) unmarshallerControl.getMock();
|
||||
template.setUnmarshaller(unmarshallerMock);
|
||||
Object request = new Object();
|
||||
Object expected = new Object();
|
||||
Result requestResult = new StringResult();
|
||||
Source responseSource = new StringSource("");
|
||||
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
messageControl.expectAndReturn(requestMock.getPayloadResult(), requestResult);
|
||||
marshallerMock.marshal(request, requestResult);
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), responseMock);
|
||||
messageControl.expectAndReturn(responseMock.getPayloadSource(), responseSource);
|
||||
unmarshallerControl.expectAndReturn(unmarshallerMock.unmarshal(responseSource), expected);
|
||||
|
||||
replayMockControls();
|
||||
marshallerControl.replay();
|
||||
unmarshallerControl.replay();
|
||||
|
||||
Object response = template.sendAndReceive(request);
|
||||
|
||||
assertEquals("Invalid response", expected, response);
|
||||
|
||||
verifyMockControls();
|
||||
marshallerControl.verify();
|
||||
unmarshallerControl.verify();
|
||||
}
|
||||
|
||||
public void testSendAndReceiveMarshallNoResponse() throws Exception {
|
||||
template.setMessageSender(new NoResponseMessageSender());
|
||||
MockControl marshallerControl = MockControl.createControl(Marshaller.class);
|
||||
Marshaller marshallerMock = (Marshaller) marshallerControl.getMock();
|
||||
template.setMarshaller(marshallerMock);
|
||||
MockControl unmarshallerControl = MockControl.createControl(Unmarshaller.class);
|
||||
Unmarshaller unmarshallerMock = (Unmarshaller) unmarshallerControl.getMock();
|
||||
template.setUnmarshaller(unmarshallerMock);
|
||||
Object request = new Object();
|
||||
Result requestResult = new StringResult();
|
||||
|
||||
factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), requestMock);
|
||||
messageControl.expectAndReturn(requestMock.getPayloadResult(), requestResult);
|
||||
marshallerMock.marshal(request, requestResult);
|
||||
|
||||
replayMockControls();
|
||||
marshallerControl.replay();
|
||||
|
||||
Object response = template.sendAndReceive(request);
|
||||
|
||||
assertNull("Invalid response", response);
|
||||
|
||||
verifyMockControls();
|
||||
marshallerControl.verify();
|
||||
}
|
||||
|
||||
private void replayMockControls() {
|
||||
factoryControl.replay();
|
||||
messageControl.replay();
|
||||
@@ -105,5 +198,18 @@ public class WebServiceTemplateTest extends TestCase {
|
||||
messageControl.verify();
|
||||
}
|
||||
|
||||
private class NoResponseMessageSender implements WebServiceMessageSender {
|
||||
|
||||
public void sendAndReceive(MessageContext messageContext) throws IOException {
|
||||
assertEquals("Invalid request message", requestMock, messageContext.getRequest());
|
||||
}
|
||||
}
|
||||
|
||||
private class ResponseMessageSender implements WebServiceMessageSender {
|
||||
|
||||
public void sendAndReceive(MessageContext messageContext) throws IOException {
|
||||
assertEquals("Invalid request message", requestMock, messageContext.getRequest());
|
||||
messageContext.getResponse();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user