1   /*
2    * Copyright 2007 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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  }