NameImpl.java revision 759:311b931e5485
1145519Sdarrenr/* 2145510Sdarrenr * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. 322514Sdarrenr * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 453024Sguido * 522514Sdarrenr * This code is free software; you can redistribute it and/or modify it 680486Sdarrenr * under the terms of the GNU General Public License version 2 only, as 7145510Sdarrenr * published by the Free Software Foundation. Oracle designates this 822514Sdarrenr * particular file as subject to the "Classpath" exception as provided 931183Speter * by Oracle in the LICENSE file that accompanied this code. 1031183Speter * 11145510Sdarrenr * This code is distributed in the hope that it will be useful, but WITHOUT 1222514Sdarrenr * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13145510Sdarrenr * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1422514Sdarrenr * version 2 for more details (a copy is included in the LICENSE file that 1522514Sdarrenr * accompanied this code). 1622514Sdarrenr * 1722514Sdarrenr * You should have received a copy of the GNU General Public License version 1822514Sdarrenr * 2 along with this work; if not, write to the Free Software Foundation, 1922514Sdarrenr * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20145510Sdarrenr * 21145510Sdarrenr * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22145510Sdarrenr * or visit www.oracle.com if you need additional information or have any 2322514Sdarrenr * questions. 2453024Sguido */ 2553024Sguido 2653024Sguidopackage com.sun.xml.internal.messaging.saaj.soap.name; 2722514Sdarrenr 2822514Sdarrenrimport java.util.logging.Level; 2922514Sdarrenrimport java.util.logging.Logger; 3022514Sdarrenr 3122514Sdarrenrimport javax.xml.namespace.QName; 32145510Sdarrenrimport javax.xml.soap.Name; 3322514Sdarrenrimport javax.xml.soap.SOAPConstants; 3422514Sdarrenr 3522514Sdarrenr//import com.sun.org.apache.xerces.internal.xni.NamespaceContext; 3622514Sdarrenrimport org.w3c.dom.Element; 3722514Sdarrenrimport com.sun.xml.internal.messaging.saaj.util.LogDomainConstants; 3822514Sdarrenr 3922514Sdarrenrpublic class NameImpl implements Name { 4022514Sdarrenr public static final String XML_NAMESPACE_PREFIX = "xml"; 4122514Sdarrenr public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs"; 4222514Sdarrenr public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV"; 4322514Sdarrenr 4422514Sdarrenr public static final String XML_NAMESPACE = 4522514Sdarrenr "http://www.w3.org/XML/1998/namespace"; 4622514Sdarrenr public static final String SOAP11_NAMESPACE = 4722514Sdarrenr SOAPConstants.URI_NS_SOAP_ENVELOPE; 4822514Sdarrenr public static final String SOAP12_NAMESPACE = 4922514Sdarrenr SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE; 5022514Sdarrenr public static final String XML_SCHEMA_NAMESPACE = 5122514Sdarrenr "http://www.w3.org/2001/XMLSchema"; 5222514Sdarrenr 5322514Sdarrenr protected String uri = ""; 5422514Sdarrenr protected String localName = ""; 5522514Sdarrenr protected String prefix = ""; 5622514Sdarrenr private String qualifiedName = null; 5722514Sdarrenr 5822514Sdarrenr protected static final Logger log = 5922514Sdarrenr Logger.getLogger(LogDomainConstants.NAMING_DOMAIN, 6022514Sdarrenr "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings"); 6122514Sdarrenr 6222514Sdarrenr /** 6322514Sdarrenr * XML Information Set REC 6422514Sdarrenr * all namespace attributes (including those named xmlns, 6522514Sdarrenr * whose [prefix] property has no value) have a namespace URI of http://www.w3.org/2000/xmlns/ 6622514Sdarrenr */ 6753024Sguido public final static String XMLNS_URI = "http://www.w3.org/2000/xmlns/".intern(); 6853024Sguido 6953024Sguido protected NameImpl(String name) { 7053024Sguido this.localName = name == null ? "" : name; 7122514Sdarrenr } 7222514Sdarrenr 7322514Sdarrenr protected NameImpl(String name, String prefix, String uri) { 7422514Sdarrenr this.uri = uri == null ? "" : uri; 7522514Sdarrenr this.localName = name == null ? "" : name; 7622514Sdarrenr this.prefix = prefix == null ? "" : prefix; 7722514Sdarrenr 7822514Sdarrenr if (this.prefix.equals("xmlns") && this.uri.equals("")) { 7922514Sdarrenr this.uri = XMLNS_URI; 8022514Sdarrenr } 8122514Sdarrenr if (this.uri.equals(XMLNS_URI) && this.prefix.equals("")) { 8222514Sdarrenr this.prefix = "xmlns"; 8322514Sdarrenr } 8422514Sdarrenr } 8522514Sdarrenr 8622514Sdarrenr public static Name convertToName(QName qname) { 8722514Sdarrenr return new NameImpl(qname.getLocalPart(), 8822514Sdarrenr qname.getPrefix(), 8922514Sdarrenr qname.getNamespaceURI()); 9022514Sdarrenr } 9122514Sdarrenr 9222514Sdarrenr public static QName convertToQName(Name name) { 9322514Sdarrenr return new QName(name.getURI(), 94 name.getLocalName(), 95 name.getPrefix()); 96 } 97 98 public static NameImpl createFromUnqualifiedName(String name) { 99 return new NameImpl(name); 100 } 101 102 public static Name createFromTagName(String tagName) { 103 return createFromTagAndUri(tagName, ""); 104 } 105 106 public static Name createFromQualifiedName( 107 String qualifiedName, 108 String uri) { 109 return createFromTagAndUri(qualifiedName, uri); 110 } 111 112 protected static Name createFromTagAndUri(String tagName, String uri) { 113 if (tagName == null) { 114 log.severe("SAAJ0201.name.not.created.from.null.tag"); 115 throw new IllegalArgumentException("Cannot create a name from a null tag."); 116 } 117 int index = tagName.indexOf(':'); 118 if (index < 0) { 119 return new NameImpl(tagName, "", uri); 120 } else { 121 return new NameImpl( 122 tagName.substring(index + 1), 123 tagName.substring(0, index), 124 uri); 125 } 126 } 127 128 protected static int getPrefixSeparatorIndex(String qualifiedName) { 129 int index = qualifiedName.indexOf(':'); 130 if (index < 0) { 131 log.log( 132 Level.SEVERE, 133 "SAAJ0202.name.invalid.arg.format", 134 new String[] { qualifiedName }); 135 throw new IllegalArgumentException( 136 "Argument \"" 137 + qualifiedName 138 + "\" must be of the form: \"prefix:localName\""); 139 } 140 return index; 141 } 142 143 public static String getPrefixFromQualifiedName(String qualifiedName) { 144 return qualifiedName.substring( 145 0, 146 getPrefixSeparatorIndex(qualifiedName)); 147 } 148 149 public static String getLocalNameFromQualifiedName(String qualifiedName) { 150 return qualifiedName.substring( 151 getPrefixSeparatorIndex(qualifiedName) + 1); 152 } 153 154 public static String getPrefixFromTagName(String tagName) { 155 if (isQualified(tagName)) { 156 return getPrefixFromQualifiedName(tagName); 157 } 158 return ""; 159 } 160 161 public static String getLocalNameFromTagName(String tagName) { 162 if (isQualified(tagName)) { 163 return getLocalNameFromQualifiedName(tagName); 164 } 165 return tagName; 166 } 167 168 public static boolean isQualified(String tagName) { 169 return tagName.indexOf(':') >= 0; 170 } 171 172 public static NameImpl create(String name, String prefix, String uri) { 173 if (prefix == null) 174 prefix = ""; 175 if (uri == null) 176 uri = ""; 177 if (name == null) 178 name = ""; 179 180 if (!uri.equals("") && !name.equals("")) { 181 if (uri.equals(NameImpl.SOAP11_NAMESPACE)) { 182 if (name.equalsIgnoreCase("Envelope")) 183 return createEnvelope1_1Name(prefix); 184 else if (name.equalsIgnoreCase("Header")) 185 return createHeader1_1Name(prefix); 186 else if (name.equalsIgnoreCase("Body")) 187 return createBody1_1Name(prefix); 188 else if (name.equalsIgnoreCase("Fault")) 189 return createFault1_1Name(prefix); 190 else 191 return new SOAP1_1Name(name, prefix); 192 } else if (uri.equals(SOAP12_NAMESPACE)) { 193 if (name.equalsIgnoreCase("Envelope")) 194 return createEnvelope1_2Name(prefix); 195 else if (name.equalsIgnoreCase("Header")) 196 return createHeader1_2Name(prefix); 197 else if (name.equalsIgnoreCase("Body")) 198 return createBody1_2Name(prefix); 199 else if ( 200 name.equals("Fault") 201 || name.equals("Reason") 202 || name.equals("Detail")) 203 return createFault1_2Name(name, prefix); 204 else if (name.equals("Code") || name.equals("Subcode")) 205 return createCodeSubcode1_2Name(prefix, name); 206 else 207 return new SOAP1_2Name(name, prefix); 208 } 209 210 } 211 return new NameImpl(name, prefix, uri); 212 } 213 214 public static String createQName(String prefix, String localName) { 215 if (prefix == null || prefix.equals("")) { 216 return localName; 217 } 218 return prefix + ":" + localName; 219 } 220 221 @Override 222 public boolean equals(Object obj) { 223 if (!(obj instanceof Name)) { 224 return false; 225 } 226 227 Name otherName = (Name) obj; 228 229 if (!uri.equals(otherName.getURI())) { 230 return false; 231 } 232 233 if (!localName.equals(otherName.getLocalName())) { 234 return false; 235 } 236 237 return true; 238 } 239 240 @Override 241 public int hashCode() { 242 return localName.hashCode(); 243 } 244 245 /** 246 * Get the local name part of this XML Name. 247 * 248 * @return a string for the local name. 249 */ 250 @Override 251 public String getLocalName() { 252 return localName; 253 } 254 255 /* getQualifiedName is inherited from QName */ 256 257 /** 258 * Returns the prefix associated with the namespace of the name. 259 * 260 * @return the prefix as a string. 261 */ 262 @Override 263 public String getPrefix() { 264 return prefix; 265 } 266 267 /** 268 * Returns the URI associated of the namespace. 269 * 270 * @return the uri as a string. 271 */ 272 @Override 273 public String getURI() { 274 return uri; 275 } 276 277 /** 278 * Returns a String version of the name suitable for use in an XML document. 279 */ 280 @Override 281 public String getQualifiedName() { 282 if (qualifiedName == null) { 283 if (prefix != null && prefix.length() > 0) { 284 qualifiedName = prefix + ":" + localName; 285 } else { 286 qualifiedName = localName; 287 } 288 } 289 return qualifiedName; 290 } 291 292 /** 293 * Create a name object for a SOAP1.1 Envelope. 294 * 295 * @param prefix prefix 296 * @return Envelope Name 297 */ 298 public static NameImpl createEnvelope1_1Name(String prefix) { 299 return new Envelope1_1Name(prefix); 300 } 301 302 /** 303 * Create a name object for a SOAP1.2 Envelope. 304 * 305 * @param prefix prefix 306 * @return Envelope Name 307 */ 308 public static NameImpl createEnvelope1_2Name(String prefix) { 309 return new Envelope1_2Name(prefix); 310 } 311 312 /** 313 * Create a name object for a SOAP1.1 Header. 314 * 315 * @param prefix prefix 316 * @return Header Name 317 */ 318 public static NameImpl createHeader1_1Name(String prefix) { 319 return new Header1_1Name(prefix); 320 } 321 322 /** 323 * Create a name object for a SOAP1.2 Header. 324 * 325 * @param prefix prefix 326 * @return Header Name 327 */ 328 public static NameImpl createHeader1_2Name(String prefix) { 329 return new Header1_2Name(prefix); 330 } 331 332 /** 333 * Create a name object for a SOAP1.1 Body. 334 * 335 * @param prefix prefix 336 * @return Body Name 337 */ 338 public static NameImpl createBody1_1Name(String prefix) { 339 return new Body1_1Name(prefix); 340 } 341 342 /** 343 * Create a name object for a SOAP1.2 Body. 344 * 345 * @param prefix prefix 346 * @return Body Name 347 */ 348 public static NameImpl createBody1_2Name(String prefix) { 349 return new Body1_2Name(prefix); 350 } 351 352 /** 353 * Create a name object for a SOAP1.1 Fault. 354 * 355 * @param prefix prefix 356 * @return Fault Name 357 */ 358 public static NameImpl createFault1_1Name(String prefix) { 359 return new Fault1_1Name(prefix); 360 } 361 362 /** 363 * Create a name object for a SOAP1.2 NotUnderstood element. 364 * 365 * @param prefix prefix 366 * @return NotUnderstood Name 367 */ 368 public static NameImpl createNotUnderstood1_2Name(String prefix) { 369 return new NotUnderstood1_2Name(prefix); 370 } 371 372 /** 373 * Create a name object for a SOAP1.2 Upgrade element. 374 * 375 * @param prefix prefix 376 * @return Upgrade Name 377 */ 378 public static NameImpl createUpgrade1_2Name(String prefix) { 379 return new Upgrade1_2Name(prefix); 380 } 381 382 /** 383 * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element. 384 * 385 * @param prefix prefix 386 * @return Supported Envelope Name 387 */ 388 public static NameImpl createSupportedEnvelope1_2Name(String prefix) { 389 return new SupportedEnvelope1_2Name(prefix); 390 } 391 392 /** 393 * Create a name object for a SOAP1.2 394 * Fault, Reason or Detail. 395 * 396 * @param localName Local Name of element 397 * @param prefix prefix 398 * @return Fault Name 399 */ 400 public static NameImpl createFault1_2Name( 401 String localName, 402 String prefix) { 403 return new Fault1_2Name(localName, prefix); 404 } 405 406 /** 407 * Create a name object for a SOAP1.2 Fault/Code or Subcode. 408 * 409 * @param localName Either "Code" or "Subcode" 410 * @param prefix prefix 411 * @return CodeSubcode Name 412 */ 413 public static NameImpl createCodeSubcode1_2Name( 414 String prefix, 415 String localName) { 416 return new CodeSubcode1_2Name(localName, prefix); 417 } 418 419 /** 420 * Create a name object for a SOAP1.1 Fault Detail. 421 * 422 * @return Detail Name 423 */ 424 public static NameImpl createDetail1_1Name() { 425 return new Detail1_1Name(); 426 } 427 428 public static NameImpl createDetail1_1Name(String prefix) { 429 return new Detail1_1Name(prefix); 430 } 431 432 public static NameImpl createFaultElement1_1Name(String localName) { 433 return new FaultElement1_1Name(localName); 434 } 435 436 public static NameImpl createFaultElement1_1Name(String localName, 437 String prefix) { 438 return new FaultElement1_1Name(localName, prefix); 439 } 440 441 public static NameImpl createSOAP11Name(String string) { 442 return new SOAP1_1Name(string, null); 443 } 444 public static NameImpl createSOAP12Name(String string) { 445 return new SOAP1_2Name(string, null); 446 } 447 448 public static NameImpl createSOAP12Name(String localName, String prefix) { 449 return new SOAP1_2Name(localName, prefix); 450 } 451 452 public static NameImpl createXmlName(String localName) { 453 return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE); 454 } 455 456 public static Name copyElementName(Element element) { 457 String localName = element.getLocalName(); 458 String prefix = element.getPrefix(); 459 String uri = element.getNamespaceURI(); 460 return create(localName, prefix, uri); 461 } 462 463 464static class SOAP1_1Name extends NameImpl { 465 SOAP1_1Name(String name, String prefix) { 466 super( 467 name, 468 (prefix == null || prefix.equals("")) 469 ? NameImpl.SOAP_ENVELOPE_PREFIX 470 : prefix, 471 NameImpl.SOAP11_NAMESPACE); 472 } 473} 474 475static class Envelope1_1Name extends SOAP1_1Name { 476 Envelope1_1Name(String prefix) { 477 super("Envelope", prefix); 478 } 479} 480 481static class Header1_1Name extends SOAP1_1Name { 482 Header1_1Name(String prefix) { 483 super("Header", prefix); 484 } 485} 486 487static class Body1_1Name extends SOAP1_1Name { 488 Body1_1Name(String prefix) { 489 super("Body", prefix); 490 } 491} 492 493static class Fault1_1Name extends NameImpl { 494 Fault1_1Name(String prefix) { 495 super( 496 "Fault", 497 (prefix == null || prefix.equals("")) 498 ? SOAP_ENVELOPE_PREFIX 499 : prefix, 500 SOAP11_NAMESPACE); 501 } 502} 503 504static class Detail1_1Name extends NameImpl { 505 Detail1_1Name() { 506 super("detail"); 507 } 508 509 Detail1_1Name(String prefix) { 510 super("detail", prefix, ""); 511 } 512} 513 514static class FaultElement1_1Name extends NameImpl { 515 FaultElement1_1Name(String localName) { 516 super(localName); 517 } 518 519 FaultElement1_1Name(String localName, String prefix) { 520 super(localName, prefix, ""); 521 } 522} 523 524static class SOAP1_2Name extends NameImpl { 525 SOAP1_2Name(String name, String prefix) { 526 super( 527 name, 528 (prefix == null || prefix.equals("")) 529 ? SOAPConstants.SOAP_ENV_PREFIX 530 : prefix, 531 SOAP12_NAMESPACE); 532 } 533} 534 535static class Envelope1_2Name extends SOAP1_2Name { 536 Envelope1_2Name(String prefix) { 537 super("Envelope", prefix); 538 } 539} 540 541static class Header1_2Name extends SOAP1_2Name { 542 Header1_2Name(String prefix) { 543 super("Header", prefix); 544 } 545} 546 547static class Body1_2Name extends SOAP1_2Name { 548 Body1_2Name(String prefix) { 549 super("Body", prefix); 550 } 551} 552 553static class Fault1_2Name extends NameImpl { 554 Fault1_2Name(String name, String prefix) { 555 super( 556 (name == null || name.equals("")) ? "Fault" : name, 557 (prefix == null || prefix.equals("")) 558 ? SOAPConstants.SOAP_ENV_PREFIX 559 : prefix, 560 SOAP12_NAMESPACE); 561 } 562} 563 564static class NotUnderstood1_2Name extends NameImpl { 565 NotUnderstood1_2Name(String prefix) { 566 super( 567 "NotUnderstood", 568 (prefix == null || prefix.equals("")) 569 ? SOAPConstants.SOAP_ENV_PREFIX 570 : prefix, 571 SOAP12_NAMESPACE); 572 } 573} 574 575static class Upgrade1_2Name extends NameImpl { 576 Upgrade1_2Name(String prefix) { 577 super( 578 "Upgrade", 579 (prefix == null || prefix.equals("")) 580 ? SOAPConstants.SOAP_ENV_PREFIX 581 : prefix, 582 SOAP12_NAMESPACE); 583 } 584} 585 586static class SupportedEnvelope1_2Name extends NameImpl { 587 SupportedEnvelope1_2Name(String prefix) { 588 super( 589 "SupportedEnvelope", 590 (prefix == null || prefix.equals("")) 591 ? SOAPConstants.SOAP_ENV_PREFIX 592 : prefix, 593 SOAP12_NAMESPACE); 594 } 595} 596 597static class CodeSubcode1_2Name extends SOAP1_2Name { 598 CodeSubcode1_2Name(String prefix, String localName) { 599 super(prefix, localName); 600 } 601} 602 603} 604