1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.soap12;
18
19 import java.util.Iterator;
20 import javax.xml.namespace.QName;
21
22 import org.springframework.ws.soap.AbstractSoapHeaderTestCase;
23 import org.springframework.ws.soap.SoapHeaderElement;
24 import org.springframework.ws.soap.SoapVersion;
25 import org.springframework.xml.transform.StringResult;
26
27 import org.junit.Test;
28
29 import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
30 import static org.junit.Assert.*;
31
32 public abstract class AbstractSoap12HeaderTestCase extends AbstractSoapHeaderTestCase {
33
34 @Test
35 public void testGetType() {
36 assertTrue("Invalid type returned", soapHeader instanceof Soap12Header);
37 }
38
39 @Test
40 public void testGetName() throws Exception {
41 assertEquals("Invalid qualified name", new QName(SoapVersion.SOAP_12.getEnvelopeNamespaceUri(), "Header"),
42 soapHeader.getName());
43 }
44
45 @Test
46 public void testGetSource() throws Exception {
47 StringResult result = new StringResult();
48 transformer.transform(soapHeader.getSource(), result);
49 assertXMLEqual("Invalid contents of header", "<Header xmlns='http://www.w3.org/2003/05/soap-envelope' />",
50 result.toString());
51 }
52
53 @Test
54 public void testAddNotUnderstood() throws Exception {
55 Soap12Header soap12Header = (Soap12Header) soapHeader;
56 QName headerName = new QName("http://www.springframework.org", "NotUnderstood", "spring-ws");
57 soap12Header.addNotUnderstoodHeaderElement(headerName);
58 StringResult result = new StringResult();
59 transformer.transform(soapHeader.getSource(), result);
60 assertXMLEqual("Invalid contents of header", "<Header xmlns='http://www.w3.org/2003/05/soap-envelope' >" +
61 "<NotUnderstood qname='spring-ws:NotUnderstood' xmlns:spring-ws='http://www.springframework.org' />" +
62 "</Header>", result.toString());
63 }
64
65 @Test
66 public void testAddUpgrade() throws Exception {
67 String[] supportedUris =
68 new String[]{"http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/2003/05/soap-envelope"};
69 Soap12Header soap12Header = (Soap12Header) soapHeader;
70 SoapHeaderElement header = soap12Header.addUpgradeHeaderElement(supportedUris);
71 StringResult result = new StringResult();
72 transformer.transform(soapHeader.getSource(), result);
73 assertEquals("Invalid name", header.getName(), new QName("http://www.w3.org/2003/05/soap-envelope", "Upgrade"));
74
75
76
77
78
79
80
81
82
83 }
84
85 @Test
86 public void testExamineHeaderElementsToProcessActors() throws Exception {
87 QName qName = new QName(NAMESPACE, "localName1", PREFIX);
88 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
89 headerElement.setActorOrRole("role1");
90 qName = new QName(NAMESPACE, "localName2", PREFIX);
91 headerElement = soapHeader.addHeaderElement(qName);
92 headerElement.setActorOrRole("role2");
93 qName = new QName(NAMESPACE, "localName3", PREFIX);
94 headerElement = soapHeader.addHeaderElement(qName);
95 headerElement.setActorOrRole(SoapVersion.SOAP_12.getNextActorOrRoleUri());
96 Iterator<SoapHeaderElement> iterator = ((Soap12Header) soapHeader).examineHeaderElementsToProcess(new String[]{"role1"}, false);
97 assertNotNull("header element iterator is null", iterator);
98 assertTrue("header element iterator has no elements", iterator.hasNext());
99 checkHeaderElement((SoapHeaderElement) iterator.next());
100 assertTrue("header element iterator has no elements", iterator.hasNext());
101 checkHeaderElement((SoapHeaderElement) iterator.next());
102 assertFalse("header element iterator has too many elements", iterator.hasNext());
103 }
104
105 @Test
106 public void testExamineHeaderElementsToProcessNoActors() throws Exception {
107 QName qName = new QName(NAMESPACE, "localName1", PREFIX);
108 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
109 headerElement.setActorOrRole("");
110 qName = new QName(NAMESPACE, "localName2", PREFIX);
111 headerElement = soapHeader.addHeaderElement(qName);
112 headerElement.setActorOrRole("role1");
113 qName = new QName(NAMESPACE, "localName3", PREFIX);
114 headerElement = soapHeader.addHeaderElement(qName);
115 headerElement.setActorOrRole(SoapVersion.SOAP_12.getNextActorOrRoleUri());
116 Iterator<SoapHeaderElement> iterator = ((Soap12Header) soapHeader).examineHeaderElementsToProcess(new String[0], false);
117 assertNotNull("header element iterator is null", iterator);
118 assertTrue("header element iterator has no elements", iterator.hasNext());
119 checkHeaderElement((SoapHeaderElement) iterator.next());
120 assertTrue("header element iterator has no elements", iterator.hasNext());
121 checkHeaderElement((SoapHeaderElement) iterator.next());
122 assertFalse("header element iterator has too many elements", iterator.hasNext());
123 }
124
125 @Test
126 public void testExamineHeaderElementsToProcessUltimateDestination() throws Exception {
127 QName qName = new QName(NAMESPACE, "localName", PREFIX);
128 SoapHeaderElement headerElement = soapHeader.addHeaderElement(qName);
129 headerElement.setActorOrRole(SoapVersion.SOAP_12.getUltimateReceiverRoleUri());
130 Iterator<SoapHeaderElement> iterator = ((Soap12Header) soapHeader).examineHeaderElementsToProcess(new String[]{"role"}, true);
131 assertNotNull("header element iterator is null", iterator);
132 headerElement = (SoapHeaderElement) iterator.next();
133 assertEquals("Invalid name on header element", new QName(NAMESPACE, "localName", PREFIX),
134 headerElement.getName());
135 assertFalse("header element iterator has too many elements", iterator.hasNext());
136 }
137
138 private void checkHeaderElement(SoapHeaderElement headerElement) {
139 QName name = headerElement.getName();
140 assertTrue("Invalid name on header element", new QName(NAMESPACE, "localName1", PREFIX).equals(name) ||
141 new QName(NAMESPACE, "localName3", PREFIX).equals(name));
142 }
143
144 }