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