1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.saaj.support;
18
19 import java.io.InputStream;
20
21 import javax.xml.namespace.QName;
22 import javax.xml.parsers.DocumentBuilder;
23 import javax.xml.parsers.DocumentBuilderFactory;
24 import javax.xml.soap.MessageFactory;
25 import javax.xml.soap.MimeHeaders;
26 import javax.xml.soap.Name;
27 import javax.xml.soap.SOAPEnvelope;
28 import javax.xml.soap.SOAPMessage;
29
30 import org.custommonkey.xmlunit.XMLTestCase;
31 import org.w3c.dom.Document;
32
33 import org.springframework.core.io.ClassPathResource;
34 import org.springframework.core.io.Resource;
35 import org.springframework.util.StringUtils;
36 import org.springframework.ws.soap.saaj.SaajSoapMessageException;
37
38 public class SaajUtilsTest extends XMLTestCase {
39
40 private MessageFactory messageFactory;
41
42 protected void setUp() throws Exception {
43 messageFactory = MessageFactory.newInstance();
44 }
45
46 public void testToName() throws Exception {
47 SOAPMessage message = messageFactory.createMessage();
48 QName qName = new QName("localPart");
49 SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
50 Name name = SaajUtils.toName(qName, envelope);
51 assertNotNull("Invalid name", name);
52 assertEquals("Invalid local part", qName.getLocalPart(), name.getLocalName());
53 assertFalse("Invalid prefix", StringUtils.hasLength(name.getPrefix()));
54 assertFalse("Invalid namespace", StringUtils.hasLength(name.getURI()));
55 }
56
57 public void testToNameNamespace() throws Exception {
58 SOAPMessage message = messageFactory.createMessage();
59 QName qName = new QName("namespace", "localPart");
60 SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
61 envelope.addNamespaceDeclaration("prefix", "namespace");
62 Name name = SaajUtils.toName(qName, envelope);
63 assertNotNull("Invalid name", name);
64 assertEquals("Invalid namespace", qName.getNamespaceURI(), name.getURI());
65 assertEquals("Invalid local part", qName.getLocalPart(), name.getLocalName());
66 assertEquals("Invalid prefix", "prefix", name.getPrefix());
67 }
68
69 public void testToNameNamespacePrefix() throws Exception {
70 SOAPMessage message = messageFactory.createMessage();
71 QName qName = new QName("namespace", "localPart", "prefix");
72 SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
73 Name name = SaajUtils.toName(qName, envelope);
74 assertNotNull("Invalid name", name);
75 assertEquals("Invalid namespace", qName.getNamespaceURI(), name.getURI());
76 assertEquals("Invalid local part", qName.getLocalPart(), name.getLocalName());
77 assertEquals("Invalid prefix", qName.getPrefix(), name.getPrefix());
78 }
79
80 public void testToQName() throws Exception {
81 SOAPMessage message = messageFactory.createMessage();
82 Name name = message.getSOAPPart().getEnvelope().createName("localPart", null, null);
83 QName qName = SaajUtils.toQName(name);
84 assertNotNull("Invalid qName", qName);
85 assertEquals("Invalid namespace", name.getURI(), qName.getNamespaceURI());
86 assertFalse("Invalid prefix", StringUtils.hasLength(qName.getPrefix()));
87 assertFalse("Invalid namespace", StringUtils.hasLength(qName.getNamespaceURI()));
88 }
89
90 public void testToQNameNamespace() throws Exception {
91 SOAPMessage message = messageFactory.createMessage();
92 Name name = message.getSOAPPart().getEnvelope().createName("localPart", null, "namespace");
93 QName qName = SaajUtils.toQName(name);
94 assertNotNull("Invalid qName", qName);
95 assertEquals("Invalid namespace", name.getURI(), qName.getNamespaceURI());
96 assertEquals("Invalid local part", name.getLocalName(), qName.getLocalPart());
97 assertFalse("Invalid prefix", StringUtils.hasLength(qName.getPrefix()));
98 }
99
100 public void testToQNamePrefixNamespace() throws Exception {
101 SOAPMessage message = messageFactory.createMessage();
102 Name name = message.getSOAPPart().getEnvelope().createName("localPart", "prefix", "namespace");
103 QName qName = SaajUtils.toQName(name);
104 assertNotNull("Invalid qName", qName);
105 assertEquals("Invalid namespace", name.getURI(), qName.getNamespaceURI());
106 assertEquals("Invalid local part", name.getLocalName(), qName.getLocalPart());
107 assertEquals("Invalid prefix", name.getPrefix(), qName.getPrefix());
108 }
109
110 public void testLoadMessage() throws Exception {
111 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
112 factory.setNamespaceAware(true);
113 DocumentBuilder builder = factory.newDocumentBuilder();
114 Document document = builder.parse(getClass().getResourceAsStream("soapMessage.xml"));
115 SOAPMessage soapMessage =
116 SaajUtils.loadMessage(new ClassPathResource("soapMessage.xml", getClass()), messageFactory);
117 assertXMLEqual(soapMessage.getSOAPPart(), document);
118 }
119
120 public void testGetSaajVersion() throws Exception {
121 assertEquals("Invalid SAAJ version", SaajUtils.SAAJ_13, SaajUtils.getSaajVersion());
122 }
123
124 public void testGetSaajVersionInvalidEnvelope() throws Exception {
125 Resource resource = new ClassPathResource("invalidNamespaceReferenceSoapMessage.xml", getClass());
126 InputStream in = null;
127 try {
128 in = resource.getInputStream();
129 MimeHeaders headers = new MimeHeaders();
130 SOAPMessage soapMessage = messageFactory.createMessage(headers, in);
131 SaajUtils.getSaajVersion(soapMessage);
132 fail("Should have thrown SaajSoapMessageException as message envelope is invalid and cannot be accessed.");
133 }
134 catch (SaajSoapMessageException e) {
135
136 }
137 finally {
138 if (in != null) {
139 in.close();
140 }
141 }
142 }
143
144 }