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 }