1/*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.tools.internal.ws.wsdl.parser;
27
28import com.sun.tools.internal.ws.wsdl.document.schema.SchemaConstants;
29import com.sun.tools.internal.ws.wsdl.document.schema.SchemaKinds;
30import com.sun.tools.internal.ws.wsdl.document.soap.SOAPConstants;
31import com.sun.tools.internal.ws.wsdl.framework.EntityReferenceValidator;
32import com.sun.tools.internal.ws.wsdl.framework.Kind;
33
34import javax.xml.namespace.QName;
35import java.util.HashSet;
36import java.util.Set;
37
38/**
39 * An interface implemented by a class that is capable of validating
40 * a QName/Kind pair referring to an external entity.
41 *
42 * @author WS Development Team
43 */
44public class SOAPEntityReferenceValidator implements EntityReferenceValidator {
45    public SOAPEntityReferenceValidator() {
46    }
47
48    public boolean isValid(Kind kind, QName name) {
49
50        // just let all "xml:" QNames through
51        if (name.getNamespaceURI().equals(Constants.NS_XML))
52            return true;
53
54        if (kind == SchemaKinds.XSD_TYPE) {
55            return _validTypes.contains(name);
56        } else if (kind == SchemaKinds.XSD_ELEMENT) {
57            return _validElements.contains(name);
58        } else if (kind == SchemaKinds.XSD_ATTRIBUTE) {
59            return _validAttributes.contains(name);
60        } else {
61            // no luck
62            return false;
63        }
64    }
65
66    private static final Set _validTypes;
67    private static final Set _validElements;
68    private static final Set _validAttributes;
69
70    static {
71        // add all XML Schema and SOAP types
72        _validTypes = new HashSet();
73        _validTypes.add(SOAPConstants.QNAME_TYPE_ARRAY);
74        _validTypes.add(SchemaConstants.QNAME_TYPE_STRING);
75        _validTypes.add(SchemaConstants.QNAME_TYPE_NORMALIZED_STRING);
76        _validTypes.add(SchemaConstants.QNAME_TYPE_TOKEN);
77        _validTypes.add(SchemaConstants.QNAME_TYPE_BYTE);
78        _validTypes.add(SchemaConstants.QNAME_TYPE_UNSIGNED_BYTE);
79        _validTypes.add(SchemaConstants.QNAME_TYPE_BASE64_BINARY);
80        _validTypes.add(SchemaConstants.QNAME_TYPE_HEX_BINARY);
81        _validTypes.add(SchemaConstants.QNAME_TYPE_INTEGER);
82        _validTypes.add(SchemaConstants.QNAME_TYPE_POSITIVE_INTEGER);
83        _validTypes.add(SchemaConstants.QNAME_TYPE_NEGATIVE_INTEGER);
84        _validTypes.add(SchemaConstants.QNAME_TYPE_NON_NEGATIVE_INTEGER);
85        _validTypes.add(SchemaConstants.QNAME_TYPE_NON_POSITIVE_INTEGER);
86        _validTypes.add(SchemaConstants.QNAME_TYPE_INT);
87        _validTypes.add(SchemaConstants.QNAME_TYPE_UNSIGNED_INT);
88        _validTypes.add(SchemaConstants.QNAME_TYPE_LONG);
89        _validTypes.add(SchemaConstants.QNAME_TYPE_UNSIGNED_LONG);
90        _validTypes.add(SchemaConstants.QNAME_TYPE_SHORT);
91        _validTypes.add(SchemaConstants.QNAME_TYPE_UNSIGNED_SHORT);
92        _validTypes.add(SchemaConstants.QNAME_TYPE_DECIMAL);
93        _validTypes.add(SchemaConstants.QNAME_TYPE_FLOAT);
94        _validTypes.add(SchemaConstants.QNAME_TYPE_DOUBLE);
95        _validTypes.add(SchemaConstants.QNAME_TYPE_BOOLEAN);
96        _validTypes.add(SchemaConstants.QNAME_TYPE_TIME);
97        _validTypes.add(SchemaConstants.QNAME_TYPE_DATE_TIME);
98        _validTypes.add(SchemaConstants.QNAME_TYPE_DURATION);
99        _validTypes.add(SchemaConstants.QNAME_TYPE_DATE);
100        _validTypes.add(SchemaConstants.QNAME_TYPE_G_MONTH);
101        _validTypes.add(SchemaConstants.QNAME_TYPE_G_YEAR);
102        _validTypes.add(SchemaConstants.QNAME_TYPE_G_YEAR_MONTH);
103        _validTypes.add(SchemaConstants.QNAME_TYPE_G_DAY);
104        _validTypes.add(SchemaConstants.QNAME_TYPE_G_MONTH_DAY);
105        _validTypes.add(SchemaConstants.QNAME_TYPE_NAME);
106        _validTypes.add(SchemaConstants.QNAME_TYPE_QNAME);
107        _validTypes.add(SchemaConstants.QNAME_TYPE_NCNAME);
108        _validTypes.add(SchemaConstants.QNAME_TYPE_ANY_URI);
109        _validTypes.add(SchemaConstants.QNAME_TYPE_ID);
110        _validTypes.add(SchemaConstants.QNAME_TYPE_IDREF);
111        _validTypes.add(SchemaConstants.QNAME_TYPE_IDREFS);
112        _validTypes.add(SchemaConstants.QNAME_TYPE_ENTITY);
113        _validTypes.add(SchemaConstants.QNAME_TYPE_ENTITIES);
114        _validTypes.add(SchemaConstants.QNAME_TYPE_NOTATION);
115        _validTypes.add(SchemaConstants.QNAME_TYPE_NMTOKEN);
116        _validTypes.add(SchemaConstants.QNAME_TYPE_NMTOKENS);
117        _validTypes.add(SchemaConstants.QNAME_TYPE_URTYPE);
118        _validTypes.add(SchemaConstants.QNAME_TYPE_SIMPLE_URTYPE);
119        _validTypes.add(SOAPConstants.QNAME_TYPE_STRING);
120        _validTypes.add(SOAPConstants.QNAME_TYPE_NORMALIZED_STRING);
121        _validTypes.add(SOAPConstants.QNAME_TYPE_TOKEN);
122        _validTypes.add(SOAPConstants.QNAME_TYPE_BYTE);
123        _validTypes.add(SOAPConstants.QNAME_TYPE_UNSIGNED_BYTE);
124        _validTypes.add(SOAPConstants.QNAME_TYPE_BASE64_BINARY);
125        _validTypes.add(SOAPConstants.QNAME_TYPE_HEX_BINARY);
126        _validTypes.add(SOAPConstants.QNAME_TYPE_INTEGER);
127        _validTypes.add(SOAPConstants.QNAME_TYPE_POSITIVE_INTEGER);
128        _validTypes.add(SOAPConstants.QNAME_TYPE_NEGATIVE_INTEGER);
129        _validTypes.add(SOAPConstants.QNAME_TYPE_NON_NEGATIVE_INTEGER);
130        _validTypes.add(SOAPConstants.QNAME_TYPE_NON_POSITIVE_INTEGER);
131        _validTypes.add(SOAPConstants.QNAME_TYPE_INT);
132        _validTypes.add(SOAPConstants.QNAME_TYPE_UNSIGNED_INT);
133        _validTypes.add(SOAPConstants.QNAME_TYPE_LONG);
134        _validTypes.add(SOAPConstants.QNAME_TYPE_UNSIGNED_LONG);
135        _validTypes.add(SOAPConstants.QNAME_TYPE_SHORT);
136        _validTypes.add(SOAPConstants.QNAME_TYPE_UNSIGNED_SHORT);
137        _validTypes.add(SOAPConstants.QNAME_TYPE_DECIMAL);
138        _validTypes.add(SOAPConstants.QNAME_TYPE_FLOAT);
139        _validTypes.add(SOAPConstants.QNAME_TYPE_DOUBLE);
140        _validTypes.add(SOAPConstants.QNAME_TYPE_BOOLEAN);
141        _validTypes.add(SOAPConstants.QNAME_TYPE_TIME);
142        _validTypes.add(SOAPConstants.QNAME_TYPE_DATE_TIME);
143        _validTypes.add(SOAPConstants.QNAME_TYPE_DURATION);
144        _validTypes.add(SOAPConstants.QNAME_TYPE_DATE);
145        _validTypes.add(SOAPConstants.QNAME_TYPE_G_MONTH);
146        _validTypes.add(SOAPConstants.QNAME_TYPE_G_YEAR);
147        _validTypes.add(SOAPConstants.QNAME_TYPE_G_YEAR_MONTH);
148        _validTypes.add(SOAPConstants.QNAME_TYPE_G_DAY);
149        _validTypes.add(SOAPConstants.QNAME_TYPE_G_MONTH_DAY);
150        _validTypes.add(SOAPConstants.QNAME_TYPE_NAME);
151        _validTypes.add(SOAPConstants.QNAME_TYPE_QNAME);
152        _validTypes.add(SOAPConstants.QNAME_TYPE_NCNAME);
153        _validTypes.add(SOAPConstants.QNAME_TYPE_ANY_URI);
154        _validTypes.add(SOAPConstants.QNAME_TYPE_ID);
155        _validTypes.add(SOAPConstants.QNAME_TYPE_IDREF);
156        _validTypes.add(SOAPConstants.QNAME_TYPE_IDREFS);
157        _validTypes.add(SOAPConstants.QNAME_TYPE_ENTITY);
158        _validTypes.add(SOAPConstants.QNAME_TYPE_ENTITIES);
159        _validTypes.add(SOAPConstants.QNAME_TYPE_NOTATION);
160        _validTypes.add(SOAPConstants.QNAME_TYPE_NMTOKEN);
161        _validTypes.add(SOAPConstants.QNAME_TYPE_NMTOKENS);
162        _validTypes.add(SOAPConstants.QNAME_TYPE_BASE64);
163        // New types 12/3/02
164        _validTypes.add(SchemaConstants.QNAME_TYPE_LANGUAGE);
165
166        // add all SOAP encoding elements
167        _validElements = new HashSet();
168        _validElements.add(SOAPConstants.QNAME_ELEMENT_STRING);
169        _validElements.add(SOAPConstants.QNAME_ELEMENT_NORMALIZED_STRING);
170        _validElements.add(SOAPConstants.QNAME_ELEMENT_TOKEN);
171        _validElements.add(SOAPConstants.QNAME_ELEMENT_BYTE);
172        _validElements.add(SOAPConstants.QNAME_ELEMENT_UNSIGNED_BYTE);
173        _validElements.add(SOAPConstants.QNAME_ELEMENT_BASE64_BINARY);
174        _validElements.add(SOAPConstants.QNAME_ELEMENT_HEX_BINARY);
175        _validElements.add(SOAPConstants.QNAME_ELEMENT_INTEGER);
176        _validElements.add(SOAPConstants.QNAME_ELEMENT_POSITIVE_INTEGER);
177        _validElements.add(SOAPConstants.QNAME_ELEMENT_NEGATIVE_INTEGER);
178        _validElements.add(SOAPConstants.QNAME_ELEMENT_NON_NEGATIVE_INTEGER);
179        _validElements.add(SOAPConstants.QNAME_ELEMENT_NON_POSITIVE_INTEGER);
180        _validElements.add(SOAPConstants.QNAME_ELEMENT_INT);
181        _validElements.add(SOAPConstants.QNAME_ELEMENT_UNSIGNED_INT);
182        _validElements.add(SOAPConstants.QNAME_ELEMENT_LONG);
183        _validElements.add(SOAPConstants.QNAME_ELEMENT_UNSIGNED_LONG);
184        _validElements.add(SOAPConstants.QNAME_ELEMENT_SHORT);
185        _validElements.add(SOAPConstants.QNAME_ELEMENT_UNSIGNED_SHORT);
186        _validElements.add(SOAPConstants.QNAME_ELEMENT_DECIMAL);
187        _validElements.add(SOAPConstants.QNAME_ELEMENT_FLOAT);
188        _validElements.add(SOAPConstants.QNAME_ELEMENT_DOUBLE);
189        _validElements.add(SOAPConstants.QNAME_ELEMENT_BOOLEAN);
190        _validElements.add(SOAPConstants.QNAME_ELEMENT_TIME);
191        _validElements.add(SOAPConstants.QNAME_ELEMENT_DATE_TIME);
192        _validElements.add(SOAPConstants.QNAME_ELEMENT_DURATION);
193        _validElements.add(SOAPConstants.QNAME_ELEMENT_DATE);
194        _validElements.add(SOAPConstants.QNAME_ELEMENT_G_MONTH);
195        _validElements.add(SOAPConstants.QNAME_ELEMENT_G_YEAR);
196        _validElements.add(SOAPConstants.QNAME_ELEMENT_G_YEAR_MONTH);
197        _validElements.add(SOAPConstants.QNAME_ELEMENT_G_DAY);
198        _validElements.add(SOAPConstants.QNAME_ELEMENT_G_MONTH_DAY);
199        _validElements.add(SOAPConstants.QNAME_ELEMENT_NAME);
200        _validElements.add(SOAPConstants.QNAME_ELEMENT_QNAME);
201        _validElements.add(SOAPConstants.QNAME_ELEMENT_NCNAME);
202        _validElements.add(SOAPConstants.QNAME_ELEMENT_ANY_URI);
203        _validElements.add(SOAPConstants.QNAME_ELEMENT_ID);
204        _validElements.add(SOAPConstants.QNAME_ELEMENT_IDREF);
205        _validElements.add(SOAPConstants.QNAME_ELEMENT_IDREFS);
206        _validElements.add(SOAPConstants.QNAME_ELEMENT_ENTITY);
207        _validElements.add(SOAPConstants.QNAME_ELEMENT_ENTITIES);
208        _validElements.add(SOAPConstants.QNAME_ELEMENT_NOTATION);
209        _validElements.add(SOAPConstants.QNAME_ELEMENT_NMTOKEN);
210        _validElements.add(SOAPConstants.QNAME_ELEMENT_NMTOKENS);
211
212        _validAttributes = new HashSet();
213        _validAttributes.add(SOAPConstants.QNAME_ATTR_ARRAY_TYPE);
214        _validAttributes.add(SOAPConstants.QNAME_ATTR_OFFSET);
215        _validAttributes.add(SOAPConstants.QNAME_ATTR_POSITION);
216    }
217}
218