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 java.io.ByteArrayInputStream;
20 import java.io.InputStream;
21 import java.net.URI;
22 import javax.servlet.http.HttpServletResponse;
23 import javax.xml.parsers.DocumentBuilder;
24 import javax.xml.parsers.DocumentBuilderFactory;
25
26 import org.springframework.core.io.ClassPathResource;
27 import org.springframework.mock.web.MockHttpServletRequest;
28 import org.springframework.mock.web.MockHttpServletResponse;
29 import org.springframework.ws.wsdl.WsdlDefinition;
30 import org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition;
31 import org.springframework.xml.transform.StringSource;
32
33 import org.junit.Assert;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.w3c.dom.Document;
37
38 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
39 import static org.easymock.EasyMock.*;
40
41 public class WsdlDefinitionHandlerAdapterTest {
42
43 private WsdlDefinitionHandlerAdapter adapter;
44
45 private WsdlDefinition definitionMock;
46
47 private MockHttpServletRequest request;
48
49 private MockHttpServletResponse response;
50
51 @Before
52 public void setUp() throws Exception {
53 adapter = new WsdlDefinitionHandlerAdapter();
54 definitionMock = createMock(WsdlDefinition.class);
55 adapter.afterPropertiesSet();
56 request = new MockHttpServletRequest();
57 response = new MockHttpServletResponse();
58 }
59
60 @Test
61 public void handleGet() throws Exception {
62 request.setMethod(HttpTransportConstants.METHOD_GET);
63 String definition = "<definition xmlns='http://schemas.xmlsoap.org/wsdl/'/>";
64 expect(definitionMock.getSource()).andReturn(new StringSource(definition));
65
66 replay(definitionMock);
67
68 adapter.handle(request, response, definitionMock);
69 assertXMLEqual(definition, response.getContentAsString());
70
71 verify(definitionMock);
72 }
73
74 @Test
75 public void handleNonGet() throws Exception {
76 request.setMethod(HttpTransportConstants.METHOD_POST);
77
78 replay(definitionMock);
79
80 adapter.handle(request, response, definitionMock);
81 Assert.assertEquals("METHOD_NOT_ALLOWED expected", HttpServletResponse.SC_METHOD_NOT_ALLOWED,
82 response.getStatus());
83
84 verify(definitionMock);
85 }
86
87 @Test
88 public void transformLocations() throws Exception {
89 adapter.setTransformLocations(true);
90 request.setMethod(HttpTransportConstants.METHOD_GET);
91 request.setScheme("http");
92 request.setServerName("example.com");
93 request.setServerPort(8080);
94 request.setContextPath("/context");
95 request.setServletPath("/service.wsdl");
96 request.setPathInfo(null);
97 request.setRequestURI("/context/service.wsdl");
98
99 replay(definitionMock);
100
101 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
102 documentBuilderFactory.setNamespaceAware(true);
103 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
104 Document result = documentBuilder.parse(getClass().getResourceAsStream("wsdl11-input.wsdl"));
105 adapter.transformLocations(result, request);
106 Document expectedDocument = documentBuilder.parse(getClass().getResourceAsStream("wsdl11-expected.wsdl"));
107 assertXMLEqual("Invalid result", expectedDocument, result);
108
109 verify(definitionMock);
110 }
111
112 @Test
113 public void transformLocationFullUrl() throws Exception {
114 request.setScheme("http");
115 request.setServerName("example.com");
116 request.setServerPort(8080);
117 request.setContextPath("/context");
118 request.setPathInfo("/service.wsdl");
119 request.setRequestURI("/context/service.wsdl");
120 String oldLocation = "http://localhost:8080/context/service";
121
122 String result = adapter.transformLocation(oldLocation, request);
123 Assert.assertNotNull("No result", result);
124 Assert.assertEquals("Invalid result", new URI("http://example.com:8080/context/service"), new URI(result));
125 }
126
127 @Test
128 public void transformLocationEmptyContextFullUrl() throws Exception {
129 request.setScheme("http");
130 request.setServerName("example.com");
131 request.setServerPort(8080);
132 request.setContextPath("");
133 request.setRequestURI("/service.wsdl");
134 String oldLocation = "http://localhost:8080/service";
135
136 String result = adapter.transformLocation(oldLocation, request);
137 Assert.assertNotNull("No result", result);
138 Assert.assertEquals("Invalid result", new URI("http://example.com:8080/service"), new URI(result));
139 }
140
141 @Test
142 public void transformLocationRelativeUrl() throws Exception {
143 request.setScheme("http");
144 request.setServerName("example.com");
145 request.setServerPort(8080);
146 request.setContextPath("/context");
147 request.setPathInfo("/service.wsdl");
148 request.setRequestURI("/context/service.wsdl");
149 String oldLocation = "/service";
150
151 String result = adapter.transformLocation(oldLocation, request);
152 Assert.assertNotNull("No result", result);
153 Assert.assertEquals("Invalid result", new URI("http://example.com:8080/context/service"), new URI(result));
154 }
155
156 @Test
157 public void transformLocationEmptyContextRelativeUrl() throws Exception {
158 request.setScheme("http");
159 request.setServerName("example.com");
160 request.setServerPort(8080);
161 request.setContextPath("");
162 request.setRequestURI("/service.wsdl");
163 String oldLocation = "/service";
164
165 String result = adapter.transformLocation(oldLocation, request);
166 Assert.assertNotNull("No result", result);
167 Assert.assertEquals("Invalid result", new URI("http://example.com:8080/service"), new URI(result));
168 }
169
170 @Test
171 public void handleSimpleWsdl11DefinitionWithoutTransformLocations() throws Exception {
172 adapter.setTransformLocations(false);
173 request.setMethod(HttpTransportConstants.METHOD_GET);
174 request.setScheme("http");
175 request.setServerName("example.com");
176 request.setServerPort(8080);
177 request.setContextPath("/context");
178 request.setServletPath("/service.wsdl");
179 request.setPathInfo(null);
180 request.setRequestURI("/context/service.wsdl");
181
182 SimpleWsdl11Definition definition =
183 new SimpleWsdl11Definition(new ClassPathResource("echo-input.wsdl", getClass()));
184
185 adapter.handle(request, response, definition);
186
187 InputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray());
188 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
189 documentBuilderFactory.setNamespaceAware(true);
190 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
191 Document resultingDocument = documentBuilder.parse(inputStream);
192
193 documentBuilder = documentBuilderFactory.newDocumentBuilder();
194 Document expectedDocument = documentBuilder.parse(getClass().getResourceAsStream("echo-input.wsdl"));
195 assertXMLEqual("Invalid WSDL returned", expectedDocument, resultingDocument);
196 }
197
198 @Test
199 public void handleSimpleWsdl11DefinitionWithTransformLocation() throws Exception {
200 adapter.setTransformLocations(true);
201 adapter.setTransformSchemaLocations(true);
202
203 request.setMethod(HttpTransportConstants.METHOD_GET);
204 request.setScheme("http");
205 request.setServerName("example.com");
206 request.setServerPort(80);
207 request.setContextPath("/context");
208 request.setServletPath("/service.wsdl");
209 request.setPathInfo(null);
210 request.setRequestURI("/context/service.wsdl");
211
212 SimpleWsdl11Definition definition =
213 new SimpleWsdl11Definition(new ClassPathResource("echo-input.wsdl", getClass()));
214
215 adapter.handle(request, response, definition);
216
217 InputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray());
218 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
219 documentBuilderFactory.setNamespaceAware(true);
220 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
221 Document resultingDocument = documentBuilder.parse(inputStream);
222
223 documentBuilder = documentBuilderFactory.newDocumentBuilder();
224 Document expectedDocument = documentBuilder.parse(getClass().getResourceAsStream("echo-expected.wsdl"));
225 assertXMLEqual("Invalid WSDL returned", expectedDocument, resultingDocument);
226 }
227
228 }