Skip to content

Commit 4d1b1ad

Browse files
committed
Consistently invoke WebServiceMessageCallback in marshalSendAndReceive
Closes gh-1653
1 parent 27a4757 commit 4d1b1ad

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

spring-ws-core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,9 @@ public void doWithMessage(WebServiceMessage request) throws IOException, Transfo
429429
"No marshaller registered. Check configuration of WebServiceTemplate.");
430430
}
431431
MarshallingUtils.marshal(marshaller, requestPayload, request);
432-
if (requestCallback != null) {
433-
requestCallback.doWithMessage(request);
434-
}
432+
}
433+
if (requestCallback != null) {
434+
requestCallback.doWithMessage(request);
435435
}
436436
}
437437
}, new WebServiceMessageExtractor<>() {

spring-ws-core/src/test/java/org/springframework/ws/client/core/WebServiceTemplateTests.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import static org.mockito.Mockito.isNull;
4848
import static org.mockito.Mockito.mock;
4949
import static org.mockito.Mockito.reset;
50+
import static org.mockito.Mockito.verify;
5051
import static org.mockito.Mockito.when;
5152

5253
@SuppressWarnings("unchecked")
@@ -262,25 +263,43 @@ void testSendAndReceiveResultNoResponsePayload() throws Exception {
262263

263264
@Test
264265
void testSendAndReceiveMarshalResponse() throws Exception {
266+
Object unmarshalled = new Object();
267+
setupMarshallerAndUnmarshaller(unmarshalled);
268+
Object result = this.template.marshalSendAndReceive(new Object());
269+
assertThat(result).isEqualTo(unmarshalled);
270+
}
265271

272+
@Test
273+
void testSendAndReceiveInvokesCallback() throws Exception {
274+
WebServiceMessageCallback callback = mock(WebServiceMessageCallback.class);
275+
setupMarshallerAndUnmarshaller(new Object());
276+
this.template.marshalSendAndReceive(new Object(), callback);
277+
verify(callback).doWithMessage(isA(MockWebServiceMessage.class));
278+
}
279+
280+
@Test
281+
void testSendAndReceiveWithNoBodyInvokesCallback() throws Exception {
282+
WebServiceMessageCallback callback = mock(WebServiceMessageCallback.class);
283+
setupMarshallerAndUnmarshaller(new Object());
284+
Object requestPayload = null;
285+
this.template.marshalSendAndReceive(requestPayload, callback);
286+
verify(callback).doWithMessage(isA(MockWebServiceMessage.class));
287+
}
288+
289+
private void setupMarshallerAndUnmarshaller(Object unmarshalled) throws Exception {
266290
Marshaller marshallerMock = mock(Marshaller.class);
267291
this.template.setMarshaller(marshallerMock);
268292
marshallerMock.marshal(isA(Object.class), isA(Result.class));
269293

270294
Unmarshaller unmarshallerMock = mock(Unmarshaller.class);
271295
this.template.setUnmarshaller(unmarshallerMock);
272-
Object unmarshalled = new Object();
273296
when(unmarshallerMock.unmarshal(isA(Source.class))).thenReturn(unmarshalled);
274297

275298
this.connectionMock.send(isA(WebServiceMessage.class));
276299
when(this.connectionMock.hasError()).thenReturn(false);
277300
when(this.connectionMock.receive(this.messageFactory)).thenReturn(new MockWebServiceMessage("<response/>"));
278301
when(this.connectionMock.hasFault()).thenReturn(false);
279302
this.connectionMock.close();
280-
281-
Object result = this.template.marshalSendAndReceive(new Object());
282-
283-
assertThat(result).isEqualTo(unmarshalled);
284303
}
285304

286305
@Test

0 commit comments

Comments
 (0)