1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.transport.http;
18
19 import javax.servlet.http.HttpServletResponse;
20
21 import junit.framework.TestCase;
22 import org.easymock.MockControl;
23
24 import org.springframework.mock.web.MockHttpServletRequest;
25 import org.springframework.mock.web.MockHttpServletResponse;
26 import org.springframework.ws.FaultAwareWebServiceMessage;
27 import org.springframework.ws.NoEndpointFoundException;
28 import org.springframework.ws.WebServiceMessageFactory;
29 import org.springframework.ws.context.MessageContext;
30 import org.springframework.ws.transport.WebServiceMessageReceiver;
31
32 public class WebServiceMessageReceiverHandlerAdapterTest extends TestCase {
33
34 private static final String REQUEST = " <SOAP-ENV:Envelope\n" +
35 " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
36 " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n" + " <SOAP-ENV:Body>\n" +
37 " <m:GetLastTradePrice xmlns:m=\"Some-URI\">\n" + " <symbol>DIS</symbol>\n" +
38 " </m:GetLastTradePrice>\n" + " </SOAP-ENV:Body>\n" + "</SOAP-ENV:Envelope>";
39
40 private WebServiceMessageReceiverHandlerAdapter adapter;
41
42 private MockHttpServletRequest httpRequest;
43
44 private MockHttpServletResponse httpResponse;
45
46 private MockControl factoryControl;
47
48 private WebServiceMessageFactory factoryMock;
49
50 private MockControl messageControl;
51
52 private FaultAwareWebServiceMessage responseMock;
53
54 private FaultAwareWebServiceMessage requestMock;
55
56 protected void setUp() throws Exception {
57 adapter = new WebServiceMessageReceiverHandlerAdapter();
58 httpRequest = new MockHttpServletRequest();
59 httpResponse = new MockHttpServletResponse();
60 factoryControl = MockControl.createControl(WebServiceMessageFactory.class);
61 factoryMock = (WebServiceMessageFactory) factoryControl.getMock();
62 adapter.setMessageFactory(factoryMock);
63 messageControl = MockControl.createControl(FaultAwareWebServiceMessage.class);
64 requestMock = (FaultAwareWebServiceMessage) messageControl.getMock();
65 responseMock = (FaultAwareWebServiceMessage) messageControl.getMock();
66 }
67
68 public void testHandleNonPost() throws Exception {
69 httpRequest.setMethod(HttpTransportConstants.METHOD_GET);
70 replayMockControls();
71 WebServiceMessageReceiver endpoint = new WebServiceMessageReceiver() {
72
73 public void receive(MessageContext messageContext) throws Exception {
74 }
75 };
76 adapter.handle(httpRequest, httpResponse, endpoint);
77 assertEquals("METHOD_NOT_ALLOWED expected", HttpServletResponse.SC_METHOD_NOT_ALLOWED,
78 httpResponse.getStatus());
79 verifyMockControls();
80 }
81
82 public void testHandlePostNoResponse() throws Exception {
83 httpRequest.setMethod(HttpTransportConstants.METHOD_POST);
84 httpRequest.setContent(REQUEST.getBytes("UTF-8"));
85 httpRequest.setContentType("text/xml; charset=\"utf-8\"");
86 httpRequest.setCharacterEncoding("UTF-8");
87 factoryMock.createWebServiceMessage(null);
88 factoryControl.setMatcher(MockControl.ALWAYS_MATCHER);
89 factoryControl.setReturnValue(responseMock);
90
91 replayMockControls();
92 WebServiceMessageReceiver endpoint = new WebServiceMessageReceiver() {
93
94 public void receive(MessageContext messageContext) throws Exception {
95 }
96 };
97
98 adapter.handle(httpRequest, httpResponse, endpoint);
99
100 assertEquals("Invalid status code on response", HttpServletResponse.SC_ACCEPTED, httpResponse.getStatus());
101 assertEquals("Response written", 0, httpResponse.getContentAsString().length());
102 verifyMockControls();
103 }
104
105 public void testHandlePostResponse() throws Exception {
106 httpRequest.setMethod(HttpTransportConstants.METHOD_POST);
107 httpRequest.setContent(REQUEST.getBytes("UTF-8"));
108 httpRequest.setContentType("text/xml; charset=\"utf-8\"");
109 httpRequest.setCharacterEncoding("UTF-8");
110 factoryMock.createWebServiceMessage(null);
111 factoryControl.setMatcher(MockControl.ALWAYS_MATCHER);
112 factoryControl.setReturnValue(requestMock);
113 factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), responseMock);
114 messageControl.expectAndReturn(responseMock.hasFault(), false);
115 responseMock.writeTo(null);
116 messageControl.setMatcher(MockControl.ALWAYS_MATCHER);
117
118 replayMockControls();
119 WebServiceMessageReceiver endpoint = new WebServiceMessageReceiver() {
120
121 public void receive(MessageContext messageContext) throws Exception {
122 messageContext.getResponse();
123 }
124 };
125
126 adapter.handle(httpRequest, httpResponse, endpoint);
127
128 assertEquals("Invalid status code on response", HttpServletResponse.SC_OK, httpResponse.getStatus());
129 verifyMockControls();
130 }
131
132 public void testHandlePostFault() throws Exception {
133 httpRequest.setMethod(HttpTransportConstants.METHOD_POST);
134 httpRequest.setContent(REQUEST.getBytes("UTF-8"));
135 httpRequest.setContentType("text/xml; charset=\"utf-8\"");
136 httpRequest.setCharacterEncoding("UTF-8");
137 factoryMock.createWebServiceMessage(null);
138 factoryControl.setMatcher(MockControl.ALWAYS_MATCHER);
139 factoryControl.setReturnValue(requestMock);
140 factoryControl.expectAndReturn(factoryMock.createWebServiceMessage(), responseMock);
141 messageControl.expectAndReturn(responseMock.hasFault(), true);
142 responseMock.writeTo(null);
143 messageControl.setMatcher(MockControl.ALWAYS_MATCHER);
144
145 replayMockControls();
146 WebServiceMessageReceiver endpoint = new WebServiceMessageReceiver() {
147
148 public void receive(MessageContext messageContext) throws Exception {
149 messageContext.getResponse();
150 }
151 };
152
153 adapter.handle(httpRequest, httpResponse, endpoint);
154
155 assertEquals("Invalid status code on response", HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
156 httpResponse.getStatus());
157 verifyMockControls();
158 }
159
160 public void testHandleNotFound() throws Exception {
161 httpRequest.setMethod(HttpTransportConstants.METHOD_POST);
162 httpRequest.setContent(REQUEST.getBytes("UTF-8"));
163 httpRequest.setContentType("text/xml; charset=\"utf-8\"");
164 httpRequest.setCharacterEncoding("UTF-8");
165 factoryMock.createWebServiceMessage(null);
166 factoryControl.setMatcher(MockControl.ALWAYS_MATCHER);
167 factoryControl.setReturnValue(requestMock);
168
169 replayMockControls();
170
171 WebServiceMessageReceiver endpoint = new WebServiceMessageReceiver() {
172
173 public void receive(MessageContext messageContext) throws Exception {
174 throw new NoEndpointFoundException(messageContext.getRequest());
175 }
176 };
177
178 adapter.handle(httpRequest, httpResponse, endpoint);
179 assertEquals("No 404 returned", HttpServletResponse.SC_NOT_FOUND, httpResponse.getStatus());
180
181 verifyMockControls();
182
183 }
184
185 private void replayMockControls() {
186 factoryControl.replay();
187 messageControl.replay();
188 }
189
190 private void verifyMockControls() {
191 factoryControl.verify();
192 messageControl.verify();
193 }
194
195 }