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 public abstract class AbstractSoapHeaderTestCase extends AbstractSoapElementTestCase {
26
27 protected SoapHeader soapHeader;
28
29 protected static final String NAMESPACE = "http://www.springframework.org";
30
31 protected static final String PREFIX = "spring";
32
33 protected final SoapElement createSoapElement() throws Exception {
34 soapHeader = createSoapHeader();
35 return soapHeader;
36 }
37
38 protected abstract SoapHeader createSoapHeader() throws Exception;
39
40 public void testAddHeaderElement() throws Exception {
41 QName qName = new QName(NAMESPACE, "localName", PREFIX);
42 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
43 assertNotNull("No SoapHeaderElement returned", headerElement);
44 assertEquals("Invalid qName for element", qName, headerElement.getName());
45 Iterator iterator = soapHeader.examineAllHeaderElements();
46 assertTrue("SoapHeader has no elements", iterator.hasNext());
47 String payload = "<content xmlns='http://www.springframework.org'/>";
48 transformer.transform(new StringSource(payload), headerElement.getResult());
49 assertHeaderElementEqual(headerElement,
50 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>");
51 }
52
53 public void testRemoveHeaderElement() throws Exception {
54 QName qName = new QName(NAMESPACE, "localName", PREFIX);
55 soapHeader.removeHeaderElement(qName);
56 soapHeader.addHeaderElement(qName);
57 soapHeader.removeHeaderElement(qName);
58 Iterator iterator = soapHeader.examineAllHeaderElements();
59 assertFalse("SoapHeader has elements", iterator.hasNext());
60 }
61
62 public void testExamineAllHeaderElement() throws Exception {
63 QName qName = new QName(NAMESPACE, "localName", PREFIX);
64 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
65 assertEquals("Invalid qName for element", qName, headerElement.getName());
66 assertNotNull("No SoapHeaderElement returned", headerElement);
67 String payload = "<content xmlns='http://www.springframework.org'/>";
68 transformer.transform(new StringSource(payload), headerElement.getResult());
69 Iterator iterator = soapHeader.examineAllHeaderElements();
70 assertNotNull("header element iterator is null", iterator);
71 assertTrue("header element iterator has no elements", iterator.hasNext());
72 headerElement = (SoapHeaderElement) iterator.next();
73 assertEquals("Invalid qName for element", qName, headerElement.getName());
74 StringResult result = new StringResult();
75 transformer.transform(headerElement.getSource(), result);
76 assertXMLEqual("Invalid contents of header element",
77 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>",
78 result.toString());
79 assertFalse("header element iterator has too many elements", iterator.hasNext());
80 }
81
82 public void testExamineMustUnderstandHeaderElements() throws Exception {
83 QName qName1 = new QName(NAMESPACE, "localName1", PREFIX);
84 SoapHeaderElement headerElement1 = soapHeader.addHeaderElement(qName1);
85 headerElement1.setMustUnderstand(true);
86 headerElement1.setActorOrRole("role1");
87 QName qName2 = new QName(NAMESPACE, "localName2", PREFIX);
88 SoapHeaderElement headerElement2 = soapHeader.addHeaderElement(qName2);
89 headerElement2.setMustUnderstand(true);
90 headerElement2.setActorOrRole("role2");
91 Iterator iterator = soapHeader.examineMustUnderstandHeaderElements("role1");
92 assertNotNull("header element iterator is null", iterator);
93 assertTrue("header element iterator has no elements", iterator.hasNext());
94 SoapHeaderElement headerElement = (SoapHeaderElement) iterator.next();
95 assertEquals("Invalid name on header element", qName1, headerElement.getName());
96 assertTrue("MustUnderstand not set on header element", headerElement.getMustUnderstand());
97 assertEquals("Invalid role on header element", "role1", headerElement.getActorOrRole());
98 assertFalse("header element iterator has too many elements", iterator.hasNext());
99 }
100
101 public void testGetResult() throws Exception {
102 String content =
103 "<spring:localName xmlns:spring='http://www.springframework.org'><spring:content/></spring:localName>";
104 transformer.transform(new StringSource(content), soapHeader.getResult());
105 Iterator iterator = soapHeader.examineAllHeaderElements();
106 assertTrue("Header has no children", iterator.hasNext());
107 SoapHeaderElement headerElement = (SoapHeaderElement) iterator.next();
108 assertFalse("Header has too many children", iterator.hasNext());
109 assertHeaderElementEqual(headerElement, content);
110 }
111
112 protected void assertHeaderElementEqual(SoapHeaderElement headerElement, String expected) throws Exception {
113 StringResult result = new StringResult();
114 transformer.transform(headerElement.getSource(), result);
115 assertXMLEqual("Invalid contents of header element", expected, result.toString());
116 }
117
118
119 }