001: /*
002: * Copyright 2007 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.springframework.ws.transport.http;
018:
019: import javax.xml.soap.MessageFactory;
020: import javax.xml.soap.MimeHeaders;
021: import javax.xml.soap.SOAPConstants;
022: import javax.xml.soap.SOAPMessage;
023: import javax.xml.transform.Transformer;
024: import javax.xml.transform.TransformerFactory;
025:
026: import org.custommonkey.xmlunit.XMLTestCase;
027: import org.springframework.mock.web.MockHttpServletRequest;
028: import org.springframework.mock.web.MockHttpServletResponse;
029: import org.springframework.ws.soap.saaj.SaajSoapMessage;
030: import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
031: import org.springframework.xml.transform.StringResult;
032: import org.springframework.xml.transform.StringSource;
033:
034: public class HttpServletConnectionTest extends XMLTestCase {
035:
036: private HttpServletConnection connection;
037:
038: private MockHttpServletRequest httpServletRequest;
039:
040: private MockHttpServletResponse httpServletResponse;
041:
042: private static final String HEADER_NAME = "RequestHeader";
043:
044: private static final String HEADER_VALUE = "RequestHeaderValue";
045:
046: private static final String CONTENT = "<Request xmlns='http://springframework.org/spring-ws/' />";
047:
048: private static final String SOAP_CONTENT = "<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'><SOAP-ENV:Header/><SOAP-ENV:Body>"
049: + CONTENT + "</SOAP-ENV:Body></SOAP-ENV:Envelope>";
050:
051: private SaajSoapMessageFactory messageFactory;
052:
053: private TransformerFactory transformerFactory;
054:
055: protected void setUp() throws Exception {
056: httpServletRequest = new MockHttpServletRequest();
057: httpServletResponse = new MockHttpServletResponse();
058: connection = new HttpServletConnection(httpServletRequest,
059: httpServletResponse);
060: MessageFactory saajMessageFactory = MessageFactory
061: .newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
062: messageFactory = new SaajSoapMessageFactory(saajMessageFactory);
063: transformerFactory = TransformerFactory.newInstance();
064: }
065:
066: public void testReceive() throws Exception {
067: byte[] bytes = SOAP_CONTENT.getBytes("UTF-8");
068: httpServletRequest.addHeader("Content-Type", "text/xml");
069: httpServletRequest.addHeader("Content-Length", new Integer(
070: bytes.length).toString());
071: httpServletRequest.addHeader(HEADER_NAME, HEADER_VALUE);
072: httpServletRequest.setContent(bytes);
073: SaajSoapMessage message = (SaajSoapMessage) connection
074: .receive(messageFactory);
075: assertNotNull("No message received", message);
076: StringResult result = new StringResult();
077: Transformer transformer = transformerFactory.newTransformer();
078: transformer.transform(message.getPayloadSource(), result);
079: assertXMLEqual("Invalid message", CONTENT, result.toString());
080: SOAPMessage saajMessage = message.getSaajMessage();
081: String[] headerValues = saajMessage.getMimeHeaders().getHeader(
082: HEADER_NAME);
083: assertNotNull("Response has no header", headerValues);
084: assertEquals("Response has invalid header", 1,
085: headerValues.length);
086: assertEquals("Response has invalid header values",
087: HEADER_VALUE, headerValues[0]);
088: }
089:
090: public void testSend() throws Exception {
091: SaajSoapMessage message = (SaajSoapMessage) messageFactory
092: .createWebServiceMessage();
093: SOAPMessage saajMessage = message.getSaajMessage();
094: MimeHeaders mimeHeaders = saajMessage.getMimeHeaders();
095: mimeHeaders.addHeader(HEADER_NAME, HEADER_VALUE);
096: Transformer transformer = transformerFactory.newTransformer();
097: transformer.transform(new StringSource(CONTENT), message
098: .getPayloadResult());
099:
100: connection.send(message);
101:
102: assertEquals("Invalid header", HEADER_VALUE,
103: httpServletResponse.getHeader(HEADER_NAME));
104: assertXMLEqual("Invalid content", SOAP_CONTENT,
105: httpServletResponse.getContentAsString());
106: }
107:
108: }
|