1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
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.Set;
31
32 /*
33 * Copyright 2004,2007 The Apache Software Foundation.
34 * Copyright 2006 International Business Machines Corp.
35 *
36 * Licensed under the Apache License, Version 2.0 (the "License");
37 * you may not use this file except in compliance with the License.
38 * You may obtain a copy of the License at
39 *
40 * http://www.apache.org/licenses/LICENSE-2.0
41 *
42 * Unless required by applicable law or agreed to in writing, software
43 * distributed under the License is distributed on an "AS IS" BASIS,
44 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
45 * See the License for the specific language governing permissions and
46 * limitations under the License.
47 *
48 */
49 public class ComplexContentRestrictionTest extends TestCase {
50
51 /**
52 * This method will test complex content restriction.
53 *
54 * @throws Exception Any exception encountered
55 */
56 public void testComplexContentRestriction() throws Exception {
57
58 /*
59 <schema xmlns="http://www.w3.org/2001/XMLSchema"
60 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
61 xmlns:tns="http://soapinterop.org/types"
62 targetNamespace="http://soapinterop.org/types">
63
64
65 <complexType name="AssemblyRequiredProduct">
66 <sequence>
67 <element name="Name" type="string"/>
68 <element name="Description" type="string" nillable="true"/>
69 <element name="Parts" type="string" maxOccurs="unbounded"/>
70 </sequence>
71 </complexType>
72
73 <complexType name="NoAssemblyRequiredProduct">
74 <complexContent>
75 <restriction base="tns:AssemblyRequiredProduct">
76 <sequence>
77 <element name="Name" type="string"/>
78 <element name="Description" type="string" nillable="true"/>
79 <element name="Parts" type="string"/>
80 </sequence>
81 </restriction>
82 </complexContent>
83 </complexType>
84
85 </schema>
86 */
87
88 QName TYPE_QNAME = new QName("http://soapinterop.org/types",
89 "NoAssemblyRequiredProduct");
90 InputStream is = new FileInputStream(Resources.asURI("deriverestriction.xsd"));
91 XmlSchemaCollection schemaCol = new XmlSchemaCollection();
92 schemaCol.read(new StreamSource(is), null);
93
94 XmlSchemaComplexType cType =
95 (XmlSchemaComplexType)schemaCol.getTypeByQName(TYPE_QNAME);
96 assertNotNull(cType);
97
98 XmlSchemaContentModel xscm = cType.getContentModel();
99 assertNotNull(xscm);
100
101 XmlSchemaComplexContentRestriction xsccr =
102 (XmlSchemaComplexContentRestriction)xscm.getContent();
103 assertEquals(new QName("http://soapinterop.org/types",
104 "AssemblyRequiredProduct"),
105 xsccr.getBaseTypeName());
106
107 XmlSchemaSequence xsp = (XmlSchemaSequence)xsccr.getParticle();
108 assertNotNull(xsp);
109
110 XmlSchemaObjectCollection col = xsp.getItems();
111
112 Set s = new HashSet();
113 s.add("Name");
114 s.add("Description");
115 s.add("Parts");
116 for (int i = 0; i < col.getCount(); i++) {
117 XmlSchemaElement xse = (XmlSchemaElement)col.getItem(i);
118 String name = xse.getName();
119 if (name.equals("Name")) {
120 assertEquals(new QName("", "Name"),
121 xse.getQName());
122 assertEquals(new QName("http://www.w3.org/2001/XMLSchema",
123 "string"),
124 xse.getSchemaTypeName());
125 assertTrue(!xse.isAbstract());
126 assertTrue(!xse.isNillable());
127 } else if (name.equals("Description")) {
128 assertEquals(new QName("", "Description"),
129 xse.getQName());
130 assertEquals(new QName("http://www.w3.org/2001/XMLSchema",
131 "string"),
132 xse.getSchemaTypeName());
133 assertTrue(!xse.isAbstract());
134 assertTrue(xse.isNillable());
135 } else if (name.equals("Parts")) {
136 assertEquals(new QName("", "Parts"),
137 xse.getQName());
138 assertEquals(new QName("http://www.w3.org/2001/XMLSchema",
139 "string"),
140 xse.getSchemaTypeName());
141 } else {
142 fail("An invalid name of \"" + name + "\" was found.");
143 }
144 s.remove(name);
145 }
146
147 assertTrue("The set should have been empty, but instead contained: "
148 + s + ".",
149 s.isEmpty());
150
151 }
152
153 }