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.xml.soap.MessageFactory;
20 import javax.xml.soap.MimeHeaders;
21 import javax.xml.soap.SOAPConstants;
22 import javax.xml.soap.SOAPMessage;
23 import javax.xml.transform.Transformer;
24 import javax.xml.transform.TransformerFactory;
25
26 import org.springframework.mock.web.MockHttpServletRequest;
27 import org.springframework.mock.web.MockHttpServletResponse;
28 import org.springframework.ws.soap.saaj.SaajSoapMessage;
29 import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
30 import org.springframework.xml.transform.StringResult;
31 import org.springframework.xml.transform.StringSource;
32
33 import org.junit.Assert;
34 import org.junit.Before;
35 import org.junit.Test;
36
37 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
38
39 public class HttpServletConnectionTest {
40
41 private HttpServletConnection connection;
42
43 private MockHttpServletRequest httpServletRequest;
44
45 private MockHttpServletResponse httpServletResponse;
46
47 private static final String HEADER_NAME = "RequestHeader";
48
49 private static final String HEADER_VALUE = "RequestHeaderValue";
50
51 private static final String CONTENT = "<Request xmlns='http://springframework.org/spring-ws/' />";
52
53 private static final String SOAP_CONTENT =
54 "<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'><SOAP-ENV:Header/><SOAP-ENV:Body>" +
55 CONTENT + "</SOAP-ENV:Body></SOAP-ENV:Envelope>";
56
57 private SaajSoapMessageFactory messageFactory;
58
59 private TransformerFactory transformerFactory;
60
61 @Before
62 public void setUp() throws Exception {
63 httpServletRequest = new MockHttpServletRequest();
64 httpServletResponse = new MockHttpServletResponse();
65 connection = new HttpServletConnection(httpServletRequest, httpServletResponse);
66 MessageFactory saajMessageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
67 messageFactory = new SaajSoapMessageFactory(saajMessageFactory);
68 transformerFactory = TransformerFactory.newInstance();
69 }
70
71 @Test
72 public void testReceive() throws Exception {
73 byte[] bytes = SOAP_CONTENT.getBytes("UTF-8");
74 httpServletRequest.addHeader("Content-Type", "text/xml");
75 httpServletRequest.addHeader("Content-Length", Integer.toString(bytes.length));
76 httpServletRequest.addHeader(HEADER_NAME, HEADER_VALUE);
77 httpServletRequest.setContent(bytes);
78 SaajSoapMessage message = (SaajSoapMessage) connection.receive(messageFactory);
79 Assert.assertNotNull("No message received", message);
80 StringResult result = new StringResult();
81 Transformer transformer = transformerFactory.newTransformer();
82 transformer.transform(message.getPayloadSource(), result);
83 assertXMLEqual("Invalid message", CONTENT, result.toString());
84 SOAPMessage saajMessage = message.getSaajMessage();
85 String[] headerValues = saajMessage.getMimeHeaders().getHeader(HEADER_NAME);
86 Assert.assertNotNull("Response has no header", headerValues);
87 Assert.assertEquals("Response has invalid header", 1, headerValues.length);
88 Assert.assertEquals("Response has invalid header values", HEADER_VALUE, headerValues[0]);
89 }
90
91 @Test
92 public void testSend() throws Exception {
93 SaajSoapMessage message = (SaajSoapMessage) messageFactory.createWebServiceMessage();
94 SOAPMessage saajMessage = message.getSaajMessage();
95 MimeHeaders mimeHeaders = saajMessage.getMimeHeaders();
96 mimeHeaders.addHeader(HEADER_NAME, HEADER_VALUE);
97 Transformer transformer = transformerFactory.newTransformer();
98 transformer.transform(new StringSource(CONTENT), message.getPayloadResult());
99
100 connection.send(message);
101
102 Assert.assertEquals("Invalid header", HEADER_VALUE, httpServletResponse.getHeader(HEADER_NAME));
103 assertXMLEqual("Invalid content", SOAP_CONTENT, httpServletResponse.getContentAsString());
104 }
105
106 }