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 
  26 package com.sun.tools.internal.ws.wsdl.parser;
  27 
  28 import com.sun.tools.internal.ws.wsdl.document.schema.SchemaConstants;
  29 import com.sun.tools.internal.ws.wsdl.document.schema.SchemaKinds;
  30 import com.sun.tools.internal.ws.wsdl.document.soap.SOAPConstants;
  31 import com.sun.tools.internal.ws.wsdl.framework.EntityReferenceValidator;
  32 import com.sun.tools.internal.ws.wsdl.framework.Kind;
  33 
  34 import javax.xml.namespace.QName;
  35 import java.util.HashSet;
  36 import 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  */
  44 public 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 }