1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap;
18
19 import java.util.Iterator;
20 import javax.xml.namespace.QName;
21
22 import org.springframework.xml.transform.StringResult;
23 import org.springframework.xml.transform.StringSource;
24
25 import org.junit.Test;
26
27 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
28 import static org.junit.Assert.*;
29
30 public abstract class AbstractSoapHeaderTestCase extends AbstractSoapElementTestCase {
31
32 protected SoapHeader soapHeader;
33
34 protected static final String NAMESPACE = "http://www.springframework.org";
35
36 protected static final String PREFIX = "spring";
37
38 @Override
39 protected final SoapElement createSoapElement() throws Exception {
40 soapHeader = createSoapHeader();
41 return soapHeader;
42 }
43
44 protected abstract SoapHeader createSoapHeader() throws Exception;
45
46 @Test
47 public void testAddHeaderElement() throws Exception {
48 QName qName = new QName(NAMESPACE, "localName", PREFIX);
49 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
50 assertNotNull("No SoapHeaderElement returned", headerElement);
51 assertEquals("Invalid qName for element", qName, headerElement.getName());
52 Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements();
53 assertTrue("SoapHeader has no elements", iterator.hasNext());
54 String payload = "<content xmlns='http://www.springframework.org'/>";
55 transformer.transform(new StringSource(payload), headerElement.getResult());
56 assertHeaderElementEqual(headerElement,
57 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>");
58 }
59
60 @Test
61 public void testRemoveHeaderElement() throws Exception {
62 QName qName = new QName(NAMESPACE, "localName", PREFIX);
63 soapHeader.removeHeaderElement(qName);
64 soapHeader.addHeaderElement(qName);
65 soapHeader.removeHeaderElement(qName);
66 Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements();
67 assertFalse("SoapHeader has elements", iterator.hasNext());
68 }
69
70 @Test
71 public void testExamineAllHeaderElement() throws Exception {
72 QName qName = new QName(NAMESPACE, "localName", PREFIX);
73 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
74 assertEquals("Invalid qName for element", qName, headerElement.getName());
75 assertNotNull("No SoapHeaderElement returned", headerElement);
76 String payload = "<content xmlns='http://www.springframework.org'/>";
77 transformer.transform(new StringSource(payload), headerElement.getResult());
78 Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements();
79 assertNotNull("header element iterator is null", iterator);
80 assertTrue("header element iterator has no elements", iterator.hasNext());
81 headerElement = iterator.next();
82 assertEquals("Invalid qName for element", qName, headerElement.getName());
83 StringResult result = new StringResult();
84 transformer.transform(headerElement.getSource(), result);
85 assertXMLEqual("Invalid contents of header element",
86 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>",
87 result.toString());
88 assertFalse("header element iterator has too many elements", iterator.hasNext());
89 }
90
91 @Test
92 public void testExamineHeaderElementWithName() throws Exception {
93 QName name1 = new QName(NAMESPACE, "name1", PREFIX);
94 QName name2 = new QName(NAMESPACE, "name2", PREFIX);
95 soapHeader.addHeaderElement(name1);
96 soapHeader.addHeaderElement(name2);
97 Iterator<SoapHeaderElement> iterator = soapHeader.examineHeaderElements(name1);
98 assertNotNull("header element iterator is null", iterator);
99 assertTrue("header element iterator has no elements", iterator.hasNext());
100 SoapHeaderElement headerElement = iterator.next();
101 assertEquals("Invalid qName for element", name1, headerElement.getName());
102 assertFalse("header element iterator has too many elements", iterator.hasNext());
103 }
104
105 @Test
106 public void testExamineMustUnderstandHeaderElements() throws Exception {
107 QName qName1 = new QName(NAMESPACE, "localName1", PREFIX);
108 SoapHeaderElement headerElement1 = soapHeader.addHeaderElement(qName1);
109 headerElement1.setMustUnderstand(true);
110 headerElement1.setActorOrRole("role1");
111 QName qName2 = new QName(NAMESPACE, "localName2", PREFIX);
112 SoapHeaderElement headerElement2 = soapHeader.addHeaderElement(qName2);
113 headerElement2.setMustUnderstand(true);
114 headerElement2.setActorOrRole("role2");
115 Iterator<SoapHeaderElement> iterator = soapHeader.examineMustUnderstandHeaderElements("role1");
116 assertNotNull("header element iterator is null", iterator);
117 assertTrue("header element iterator has no elements", iterator.hasNext());
118 SoapHeaderElement headerElement = iterator.next();
119 assertEquals("Invalid name on header element", qName1, headerElement.getName());
120 assertTrue("MustUnderstand not set on header element", headerElement.getMustUnderstand());
121 assertEquals("Invalid role on header element", "role1", headerElement.getActorOrRole());
122 assertFalse("header element iterator has too many elements", iterator.hasNext());
123 }
124
125 @Test
126 public void testGetResult() throws Exception {
127 String content =
128 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>";
129 transformer.transform(new StringSource(content), soapHeader.getResult());
130 Iterator<SoapHeaderElement> iterator = soapHeader.examineAllHeaderElements();
131 assertTrue("Header has no children", iterator.hasNext());
132 SoapHeaderElement headerElement = iterator.next();
133 assertFalse("Header has too many children", iterator.hasNext());
134 assertHeaderElementEqual(headerElement, content);
135 }
136
137 protected void assertHeaderElementEqual(SoapHeaderElement headerElement, String expected) throws Exception {
138 StringResult result = new StringResult();
139 transformer.transform(headerElement.getSource(), result);
140 assertXMLEqual("Invalid contents of header element", expected, result.toString());
141 }
142
143
144 }