1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package tests;
21
22 import junit.framework.TestCase;
23 import org.apache.ws.commons.schema.*;
24
25 import javax.xml.namespace.QName;
26 import javax.xml.transform.stream.StreamSource;
27 import java.io.FileInputStream;
28 import java.io.InputStream;
29 import java.util.HashSet;
30 import java.util.Iterator;
31 import java.util.Set;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 public class GroupTest extends TestCase {
51
52
53
54
55
56
57 public void testGroup() throws Exception {
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 QName ELEMENT_QNAME = new QName("http://soapinterop.org/types",
93 "price");
94 InputStream is = new FileInputStream(Resources.asURI("group.xsd"));
95 XmlSchemaCollection schemaCol = new XmlSchemaCollection();
96 XmlSchema schema = schemaCol.read(new StreamSource(is), null);
97
98 XmlSchemaElement elem = schemaCol.getElementByQName(ELEMENT_QNAME);
99 assertNotNull(elem);
100 assertEquals("price", elem.getName());
101 assertEquals(new QName("http://soapinterop.org/types", "price"),
102 elem.getQName());
103
104 XmlSchemaComplexType cType = (XmlSchemaComplexType)elem.getSchemaType();
105 assertNotNull(cType);
106
107 XmlSchemaGroupRef ref = (XmlSchemaGroupRef)cType.getParticle();
108 assertEquals(new QName("http://soapinterop.org/types", "priceGroup"),
109 ref.getRefName());
110
111 XmlSchemaObjectTable t = schema.getGroups();
112 assertEquals(1, t.getCount());
113
114 XmlSchemaObject o = t.getItem(ref.getRefName());
115
116 Set s = new HashSet();
117 s.add("priceGroup");
118 for (Iterator i = t.getNames(); i.hasNext(); ) {
119 String name = ((QName)i.next()).getLocalPart();
120 assertEquals("priceGroup", name);
121 s.remove(name);
122 }
123 assertTrue("The set should have been empty, but instead contained: "
124 + s + ".",
125 s.isEmpty());
126
127 s.clear();
128 s.add("org.apache.ws.commons.schema.XmlSchemaGroup");
129 XmlSchemaGroup xsg = null;
130 for (Iterator i = t.getValues(); i.hasNext(); ) {
131 xsg = (XmlSchemaGroup)i.next();
132 s.remove(xsg.getClass().getName());
133 }
134 assertTrue("The set should have been empty, but instead contained: "
135 + s + ".",
136 s.isEmpty());
137
138 assertNotNull(xsg);
139 assertEquals("priceGroup", xsg.getName().getLocalPart());
140
141 XmlSchemaChoice xsc = (XmlSchemaChoice)xsg.getParticle();
142 assertNotNull(xsc);
143
144 s.clear();
145 s.add("fullPrice");
146 s.add("salePrice");
147 s.add("clearancePrice");
148 s.add("freePrice");
149 XmlSchemaObjectCollection items = xsc.getItems();
150 Iterator iterator = items.getIterator();
151 while (iterator.hasNext()) {
152 XmlSchemaElement e = (XmlSchemaElement)iterator.next();
153 String eName = e.getName();
154 if (eName.equals("fullPrice")) {
155 assertEquals(new QName("", "fullPrice"), e.getQName());
156 } else if (eName.equals("salePrice")) {
157 assertEquals(new QName("", "salePrice"), e.getQName());
158 } else if (eName.equals("clearancePrice")) {
159 assertEquals(new QName("", "clearancePrice"), e.getQName());
160 } else if (eName.equals("freePrice")) {
161 assertEquals(new QName("", "freePrice"), e.getQName());
162 } else {
163 fail("The name \"" + eName + "\" was found but shouldn't "
164 + "have been found.");
165 }
166 assertEquals(new QName("http://www.w3.org/2001/XMLSchema",
167 "decimal"), e.getSchemaTypeName());
168 assertTrue(s.remove(e.getName()));
169 }
170 assertTrue("The set should have been empty, but instead contained: "
171 + s + ".",
172 s.isEmpty());
173
174 }
175
176 }