1   /*
2    * Copyright 2006 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.soap.soap11;
18  
19  import java.io.InputStream;
20  import java.util.Iterator;
21  import java.util.Properties;
22  
23  import org.springframework.ws.WebServiceMessage;
24  import org.springframework.ws.mime.Attachment;
25  import org.springframework.ws.soap.AbstractSoapMessageFactoryTestCase;
26  import org.springframework.ws.soap.SoapMessage;
27  import org.springframework.ws.soap.SoapVersion;
28  import org.springframework.ws.transport.MockTransportInputStream;
29  import org.springframework.ws.transport.TransportInputStream;
30  
31  public abstract class AbstractSoap11MessageFactoryTestCase extends AbstractSoapMessageFactoryTestCase {
32  
33      public void testCreateEmptySoap11Message() throws Exception {
34          WebServiceMessage message = messageFactory.createWebServiceMessage();
35          assertTrue("Not a SoapMessage", message instanceof SoapMessage);
36          SoapMessage soapMessage = (SoapMessage) message;
37          assertEquals("Invalid soap version", SoapVersion.SOAP_11, soapMessage.getVersion());
38      }
39  
40      public void testCreateSoapMessageNoAttachment() throws Exception {
41          InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11.xml");
42          Properties headers = new Properties();
43          headers.setProperty("Content-Type", "text/xml");
44          String soapAction = "\"http://springframework.org/spring-ws/Action\"";
45          headers.setProperty("SOAPAction", soapAction);
46          TransportInputStream tis = new MockTransportInputStream(is, headers);
47  
48          WebServiceMessage message = messageFactory.createWebServiceMessage(tis);
49          assertTrue("Not a SoapMessage", message instanceof SoapMessage);
50          SoapMessage soapMessage = (SoapMessage) message;
51          assertEquals("Invalid soap version", SoapVersion.SOAP_11, soapMessage.getVersion());
52          assertEquals("Invalid soap action", soapAction, soapMessage.getSoapAction());
53          assertFalse("Message a XOP pacakge", soapMessage.isXopPackage());
54      }
55  
56      public void testCreateSoapMessageSwA() throws Exception {
57          InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-attachment.bin");
58          Properties headers = new Properties();
59          headers.setProperty("Content-Type",
60                  "multipart/related;" + "type=\"text/xml\";" + "boundary=\"----=_Part_0_11416420.1149699787554\"");
61          TransportInputStream tis = new MockTransportInputStream(is, headers);
62  
63          WebServiceMessage message = messageFactory.createWebServiceMessage(tis);
64          assertTrue("Not a SoapMessage", message instanceof SoapMessage);
65          SoapMessage soapMessage = (SoapMessage) message;
66          assertEquals("Invalid soap version", SoapVersion.SOAP_11, soapMessage.getVersion());
67          assertFalse("Message a XOP pacakge", soapMessage.isXopPackage());
68          Iterator iter = soapMessage.getAttachments();
69          assertTrue("No attachments read", iter.hasNext());
70          Attachment attachment = soapMessage.getAttachment("interface21");
71          assertNotNull("No attachment read", attachment);
72          assertEquals("Invalid content id", "interface21", attachment.getContentId());
73      }
74  
75      public void testCreateSoapMessageMtom() throws Exception {
76          InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-mtom.bin");
77          Properties headers = new Properties();
78          headers.setProperty("Content-Type", "multipart/related;" + "start-info=\"text/xml\";" +
79                  "type=\"application/xop+xml\";" + "start=\"<0.urn:uuid:[email protected]>\";" +
80                  "boundary=\"MIMEBoundaryurn_uuid_492264AB42E57108E01176731445507\"");
81          TransportInputStream tis = new MockTransportInputStream(is, headers);
82  
83          WebServiceMessage message = messageFactory.createWebServiceMessage(tis);
84          assertTrue("Not a SoapMessage", message instanceof SoapMessage);
85          SoapMessage soapMessage = (SoapMessage) message;
86          assertEquals("Invalid soap version", SoapVersion.SOAP_11, soapMessage.getVersion());
87          assertTrue("Message not a XOP pacakge", soapMessage.isXopPackage());
88          Iterator iter = soapMessage.getAttachments();
89          assertTrue("No attachments read", iter.hasNext());
90  
91          Attachment attachment = soapMessage.getAttachment("<1.urn:uuid:[email protected]>");
92          assertNotNull("No attachment read", attachment);
93      }
94  
95      public void testCreateSoapMessageMtomWeirdStartInfo() throws Exception {
96          InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-mtom.bin");
97          Properties headers = new Properties();
98          headers.setProperty("Content-Type", "multipart/related;" + "startinfo=\"text/xml\";" +
99                  "type=\"application/xop+xml\";" + "start=\"<0.urn:uuid:[email protected]>\";" +
100                 "boundary=\"MIMEBoundaryurn_uuid_492264AB42E57108E01176731445507\"");
101         TransportInputStream tis = new MockTransportInputStream(is, headers);
102 
103         WebServiceMessage message = messageFactory.createWebServiceMessage(tis);
104         assertTrue("Not a SoapMessage", message instanceof SoapMessage);
105         SoapMessage soapMessage = (SoapMessage) message;
106         assertEquals("Invalid soap version", SoapVersion.SOAP_11, soapMessage.getVersion());
107         assertTrue("Message not a XOP pacakge", soapMessage.isXopPackage());
108         Iterator iter = soapMessage.getAttachments();
109         assertTrue("No attachments read", iter.hasNext());
110 
111         Attachment attachment = soapMessage.getAttachment("<1.urn:uuid:[email protected]>");
112         assertNotNull("No attachment read", attachment);
113     }
114 
115     public void testCreateSoapMessageUtf8ByteOrderMark() throws Exception {
116         InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-utf8-bom.xml");
117         Properties headers = new Properties();
118         headers.setProperty("Content-Type", "text/xml; charset=UTF-8");
119         TransportInputStream tis = new MockTransportInputStream(is, headers);
120 
121         SoapMessage message = (SoapMessage) messageFactory.createWebServiceMessage(tis);
122         assertEquals("Invalid soap version", SoapVersion.SOAP_11, message.getVersion());
123     }
124 
125     public void testCreateSoapMessageUtf16BigEndianByteOrderMark() throws Exception {
126         InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-utf16-be-bom.xml");
127         Properties headers = new Properties();
128         headers.setProperty("Content-Type", "text/xml; charset=UTF-16");
129         TransportInputStream tis = new MockTransportInputStream(is, headers);
130 
131         SoapMessage message = (SoapMessage) messageFactory.createWebServiceMessage(tis);
132         assertEquals("Invalid soap version", SoapVersion.SOAP_11, message.getVersion());
133     }
134 
135     public void testCreateSoapMessageUtf16LittleEndianByteOrderMark() throws Exception {
136         InputStream is = AbstractSoap11MessageFactoryTestCase.class.getResourceAsStream("soap11-utf16-le-bom.xml");
137         Properties headers = new Properties();
138         headers.setProperty("Content-Type", "text/xml; charset=UTF-16");
139         TransportInputStream tis = new MockTransportInputStream(is, headers);
140 
141         SoapMessage message = (SoapMessage) messageFactory.createWebServiceMessage(tis);
142         assertEquals("Invalid soap version", SoapVersion.SOAP_11, message.getVersion());
143     }
144 
145 
146 }