src/share/classes/com/sun/xml/internal/messaging/saaj/soap/name/NameImpl.java

Mon, 04 May 2009 21:10:41 -0700

author
tbell
date
Mon, 04 May 2009 21:10:41 -0700
changeset 50
42dfec6871f6
parent 45
31822b475baa
child 78
860b95cc8d1d
permissions
-rw-r--r--

6658158: Mutable statics in SAAJ (findbugs)
6658163: txw2.DatatypeWriter.BUILDIN is a mutable static (findbugs)
Reviewed-by: darcy

duke@1 1 /*
tbell@45 2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation. Sun designates this
duke@1 8 * particular file as subject to the "Classpath" exception as provided
duke@1 9 * by Sun in the LICENSE file that accompanied this code.
duke@1 10 *
duke@1 11 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 14 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 15 * accompanied this code).
duke@1 16 *
duke@1 17 * You should have received a copy of the GNU General Public License version
duke@1 18 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 20 *
duke@1 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@1 22 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@1 23 * have any questions.
duke@1 24 */
tbell@45 25 /*
tbell@50 26 *
tbell@50 27 *
tbell@50 28 *
tbell@45 29 */
tbell@45 30
tbell@45 31
duke@1 32 package com.sun.xml.internal.messaging.saaj.soap.name;
duke@1 33
duke@1 34 import java.util.logging.Level;
duke@1 35 import java.util.logging.Logger;
duke@1 36
duke@1 37 import javax.xml.namespace.QName;
duke@1 38 import javax.xml.soap.Name;
duke@1 39 import javax.xml.soap.SOAPConstants;
duke@1 40
duke@1 41 import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
duke@1 42 import org.w3c.dom.Element;
duke@1 43
duke@1 44 import com.sun.xml.internal.messaging.saaj.soap.impl.ElementImpl;
duke@1 45 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
duke@1 46
duke@1 47 public class NameImpl implements Name {
duke@1 48 public static final String XML_NAMESPACE_PREFIX = "xml";
duke@1 49 public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
duke@1 50 public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV";
duke@1 51
duke@1 52 public static final String XML_NAMESPACE =
duke@1 53 "http://www.w3.org/XML/1998/namespace";
duke@1 54 public static final String SOAP11_NAMESPACE =
duke@1 55 SOAPConstants.URI_NS_SOAP_ENVELOPE;
duke@1 56 public static final String SOAP12_NAMESPACE =
duke@1 57 SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
duke@1 58 public static final String XML_SCHEMA_NAMESPACE =
duke@1 59 "http://www.w3.org/2001/XMLSchema";
duke@1 60
duke@1 61 protected String uri = "";
duke@1 62 protected String localName = "";
duke@1 63 protected String prefix = "";
duke@1 64 private String qualifiedName = null;
duke@1 65
tbell@50 66 protected static final Logger log =
duke@1 67 Logger.getLogger(LogDomainConstants.NAMING_DOMAIN,
duke@1 68 "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings");
duke@1 69
duke@1 70 protected NameImpl(String name) {
duke@1 71 this.localName = name == null ? "" : name;
duke@1 72 }
duke@1 73
duke@1 74 protected NameImpl(String name, String prefix, String uri) {
duke@1 75 this.uri = uri == null ? "" : uri;
duke@1 76 this.localName = name == null ? "" : name;
duke@1 77 this.prefix = prefix == null ? "" : prefix;
duke@1 78
duke@1 79 if (this.prefix.equals("xmlns") && this.uri.equals("")) {
duke@1 80 this.uri = NamespaceContext.XMLNS_URI;
duke@1 81 }
duke@1 82 if (this.uri.equals(NamespaceContext.XMLNS_URI) && this.prefix.equals("")) {
duke@1 83 this.prefix = "xmlns";
duke@1 84 }
duke@1 85 }
duke@1 86
duke@1 87 public static Name convertToName(QName qname) {
duke@1 88 return new NameImpl(qname.getLocalPart(),
duke@1 89 qname.getPrefix(),
duke@1 90 qname.getNamespaceURI());
duke@1 91 }
duke@1 92
duke@1 93 public static QName convertToQName(Name name) {
duke@1 94 return new QName(name.getURI(),
duke@1 95 name.getLocalName(),
duke@1 96 name.getPrefix());
duke@1 97 }
duke@1 98
duke@1 99 public static NameImpl createFromUnqualifiedName(String name) {
duke@1 100 return new NameImpl(name);
duke@1 101 }
duke@1 102
duke@1 103 public static Name createFromTagName(String tagName) {
duke@1 104 return createFromTagAndUri(tagName, "");
duke@1 105 }
duke@1 106
duke@1 107 public static Name createFromQualifiedName(
duke@1 108 String qualifiedName,
duke@1 109 String uri) {
duke@1 110 return createFromTagAndUri(qualifiedName, uri);
duke@1 111 }
duke@1 112
duke@1 113 protected static Name createFromTagAndUri(String tagName, String uri) {
duke@1 114 if (tagName == null) {
duke@1 115 log.severe("SAAJ0201.name.not.created.from.null.tag");
duke@1 116 throw new IllegalArgumentException("Cannot create a name from a null tag.");
duke@1 117 }
duke@1 118 int index = tagName.indexOf(':');
duke@1 119 if (index < 0) {
duke@1 120 return new NameImpl(tagName, "", uri);
duke@1 121 } else {
duke@1 122 return new NameImpl(
duke@1 123 tagName.substring(index + 1),
duke@1 124 tagName.substring(0, index),
duke@1 125 uri);
duke@1 126 }
duke@1 127 }
duke@1 128
duke@1 129 protected static int getPrefixSeparatorIndex(String qualifiedName) {
duke@1 130 int index = qualifiedName.indexOf(':');
duke@1 131 if (index < 0) {
duke@1 132 log.log(
duke@1 133 Level.SEVERE,
duke@1 134 "SAAJ0202.name.invalid.arg.format",
duke@1 135 new String[] { qualifiedName });
duke@1 136 throw new IllegalArgumentException(
duke@1 137 "Argument \""
duke@1 138 + qualifiedName
duke@1 139 + "\" must be of the form: \"prefix:localName\"");
duke@1 140 }
duke@1 141 return index;
duke@1 142 }
duke@1 143
duke@1 144 public static String getPrefixFromQualifiedName(String qualifiedName) {
duke@1 145 return qualifiedName.substring(
duke@1 146 0,
duke@1 147 getPrefixSeparatorIndex(qualifiedName));
duke@1 148 }
duke@1 149
duke@1 150 public static String getLocalNameFromQualifiedName(String qualifiedName) {
duke@1 151 return qualifiedName.substring(
duke@1 152 getPrefixSeparatorIndex(qualifiedName) + 1);
duke@1 153 }
duke@1 154
duke@1 155 public static String getPrefixFromTagName(String tagName) {
duke@1 156 if (isQualified(tagName)) {
duke@1 157 return getPrefixFromQualifiedName(tagName);
duke@1 158 }
duke@1 159 return "";
duke@1 160 }
duke@1 161
duke@1 162 public static String getLocalNameFromTagName(String tagName) {
duke@1 163 if (isQualified(tagName)) {
duke@1 164 return getLocalNameFromQualifiedName(tagName);
duke@1 165 }
duke@1 166 return tagName;
duke@1 167 }
duke@1 168
duke@1 169 public static boolean isQualified(String tagName) {
duke@1 170 return tagName.indexOf(':') >= 0;
duke@1 171 }
duke@1 172
duke@1 173 public static NameImpl create(String name, String prefix, String uri) {
duke@1 174 if (prefix == null)
duke@1 175 prefix = "";
duke@1 176 if (uri == null)
duke@1 177 uri = "";
duke@1 178 if (name == null)
duke@1 179 name = "";
duke@1 180
duke@1 181 if (!uri.equals("") && !name.equals("")) {
duke@1 182 if (uri.equals(NameImpl.SOAP11_NAMESPACE)) {
duke@1 183 if (name.equalsIgnoreCase("Envelope"))
duke@1 184 return createEnvelope1_1Name(prefix);
duke@1 185 else if (name.equalsIgnoreCase("Header"))
duke@1 186 return createHeader1_1Name(prefix);
duke@1 187 else if (name.equalsIgnoreCase("Body"))
duke@1 188 return createBody1_1Name(prefix);
duke@1 189 else if (name.equalsIgnoreCase("Fault"))
duke@1 190 return createFault1_1Name(prefix);
duke@1 191 else
duke@1 192 return new SOAP1_1Name(name, prefix);
duke@1 193 } else if (uri.equals(SOAP12_NAMESPACE)) {
duke@1 194 if (name.equalsIgnoreCase("Envelope"))
duke@1 195 return createEnvelope1_2Name(prefix);
duke@1 196 else if (name.equalsIgnoreCase("Header"))
duke@1 197 return createHeader1_2Name(prefix);
duke@1 198 else if (name.equalsIgnoreCase("Body"))
duke@1 199 return createBody1_2Name(prefix);
duke@1 200 else if (
duke@1 201 name.equals("Fault")
duke@1 202 || name.equals("Reason")
duke@1 203 || name.equals("Detail"))
duke@1 204 return createFault1_2Name(name, prefix);
duke@1 205 else if (name.equals("Code") || name.equals("Subcode"))
duke@1 206 return createCodeSubcode1_2Name(prefix, name);
duke@1 207 else
duke@1 208 return new SOAP1_2Name(name, prefix);
duke@1 209 }
duke@1 210
duke@1 211 }
duke@1 212 return new NameImpl(name, prefix, uri);
duke@1 213 }
duke@1 214
duke@1 215 public static String createQName(String prefix, String localName) {
duke@1 216 if (prefix == null || prefix.equals("")) {
duke@1 217 return localName;
duke@1 218 }
duke@1 219 return prefix + ":" + localName;
duke@1 220 }
duke@1 221
duke@1 222 public boolean equals(Object obj) {
duke@1 223 if (!(obj instanceof Name)) {
duke@1 224 return false;
duke@1 225 }
duke@1 226
duke@1 227 Name otherName = (Name) obj;
duke@1 228
duke@1 229 if (!uri.equals(otherName.getURI())) {
duke@1 230 return false;
duke@1 231 }
duke@1 232
duke@1 233 if (!localName.equals(otherName.getLocalName())) {
duke@1 234 return false;
duke@1 235 }
duke@1 236
duke@1 237 return true;
duke@1 238 }
duke@1 239
duke@1 240 /**
duke@1 241 * Get the local name part of this XML Name.
duke@1 242 *
duke@1 243 * @return a string for the local name.
duke@1 244 */
duke@1 245 public String getLocalName() {
duke@1 246 return localName;
duke@1 247 }
duke@1 248
duke@1 249 /* getQualifiedName is inherited from QName */
duke@1 250
duke@1 251 /**
duke@1 252 * Returns the prefix associated with the namespace of the name.
duke@1 253 *
duke@1 254 * @return the prefix as a string.
duke@1 255 */
duke@1 256 public String getPrefix() {
duke@1 257 return prefix;
duke@1 258 }
duke@1 259
duke@1 260 /**
duke@1 261 * Returns the URI associated of the namespace.
duke@1 262 *
duke@1 263 * @return the uri as a string.
duke@1 264 */
duke@1 265 public String getURI() {
duke@1 266 return uri;
duke@1 267 }
duke@1 268
duke@1 269 /**
duke@1 270 * Returns a String version of the name suitable for use in an XML document.
duke@1 271 */
duke@1 272 public String getQualifiedName() {
duke@1 273 if (qualifiedName == null) {
duke@1 274 if (prefix != null && prefix.length() > 0) {
duke@1 275 qualifiedName = prefix + ":" + localName;
duke@1 276 } else {
duke@1 277 qualifiedName = localName;
duke@1 278 }
duke@1 279 }
duke@1 280 return qualifiedName;
duke@1 281 }
duke@1 282
duke@1 283 /**
duke@1 284 * Create a name object for a SOAP1.1 Envelope.
duke@1 285 */
duke@1 286 public static NameImpl createEnvelope1_1Name(String prefix) {
duke@1 287 return new Envelope1_1Name(prefix);
duke@1 288 }
duke@1 289
duke@1 290 /**
duke@1 291 * Create a name object for a SOAP1.2 Envelope.
duke@1 292 */
duke@1 293 public static NameImpl createEnvelope1_2Name(String prefix) {
duke@1 294 return new Envelope1_2Name(prefix);
duke@1 295 }
duke@1 296
duke@1 297 /**
duke@1 298 * Create a name object for a SOAP1.1 Header.
duke@1 299 */
duke@1 300 public static NameImpl createHeader1_1Name(String prefix) {
duke@1 301 return new Header1_1Name(prefix);
duke@1 302 }
duke@1 303
duke@1 304 /**
duke@1 305 * Create a name object for a SOAP1.2 Header.
duke@1 306 */
duke@1 307 public static NameImpl createHeader1_2Name(String prefix) {
duke@1 308 return new Header1_2Name(prefix);
duke@1 309 }
duke@1 310
duke@1 311 /**
duke@1 312 * Create a name object for a SOAP1.1 Body.
duke@1 313 */
duke@1 314 public static NameImpl createBody1_1Name(String prefix) {
duke@1 315 return new Body1_1Name(prefix);
duke@1 316 }
duke@1 317
duke@1 318 /**
duke@1 319 * Create a name object for a SOAP1.2 Body.
duke@1 320 */
duke@1 321 public static NameImpl createBody1_2Name(String prefix) {
duke@1 322 return new Body1_2Name(prefix);
duke@1 323 }
duke@1 324
duke@1 325 /**
duke@1 326 * Create a name object for a SOAP1.1 Fault.
duke@1 327 */
duke@1 328 public static NameImpl createFault1_1Name(String prefix) {
duke@1 329 return new Fault1_1Name(prefix);
duke@1 330 }
duke@1 331
duke@1 332 /**
duke@1 333 * Create a name object for a SOAP1.2 NotUnderstood element.
duke@1 334 */
duke@1 335 public static NameImpl createNotUnderstood1_2Name(String prefix) {
duke@1 336 return new NotUnderstood1_2Name(prefix);
duke@1 337 }
duke@1 338
duke@1 339 /**
duke@1 340 * Create a name object for a SOAP1.2 Upgrade element.
duke@1 341 */
duke@1 342 public static NameImpl createUpgrade1_2Name(String prefix) {
duke@1 343 return new Upgrade1_2Name(prefix);
duke@1 344 }
duke@1 345
duke@1 346 /**
duke@1 347 * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element.
duke@1 348 */
duke@1 349 public static NameImpl createSupportedEnvelope1_2Name(String prefix) {
duke@1 350 return new SupportedEnvelope1_2Name(prefix);
duke@1 351 }
duke@1 352
duke@1 353 /**
duke@1 354 * Create a name object for a SOAP1.2
duke@1 355 * Fault, Reason or Detail.
duke@1 356 *
duke@1 357 * @param localName Local Name of element
duke@1 358 */
duke@1 359 public static NameImpl createFault1_2Name(
duke@1 360 String localName,
duke@1 361 String prefix) {
duke@1 362 return new Fault1_2Name(localName, prefix);
duke@1 363 }
duke@1 364
duke@1 365 /**
duke@1 366 * Create a name object for a SOAP1.2 Fault/Code or Subcode.
duke@1 367 *
duke@1 368 * @param localName Either "Code" or "Subcode"
duke@1 369 */
duke@1 370 public static NameImpl createCodeSubcode1_2Name(
duke@1 371 String prefix,
duke@1 372 String localName) {
duke@1 373 return new CodeSubcode1_2Name(localName, prefix);
duke@1 374 }
duke@1 375
duke@1 376 /**
duke@1 377 * Create a name object for a SOAP1.1 Fault Detail.
duke@1 378 */
duke@1 379 public static NameImpl createDetail1_1Name() {
duke@1 380 return new Detail1_1Name();
duke@1 381 }
duke@1 382
duke@1 383 public static NameImpl createDetail1_1Name(String prefix) {
duke@1 384 return new Detail1_1Name(prefix);
duke@1 385 }
duke@1 386
duke@1 387 public static NameImpl createFaultElement1_1Name(String localName) {
duke@1 388 return new FaultElement1_1Name(localName);
duke@1 389 }
duke@1 390
duke@1 391 public static NameImpl createFaultElement1_1Name(String localName,
duke@1 392 String prefix) {
duke@1 393 return new FaultElement1_1Name(localName, prefix);
duke@1 394 }
duke@1 395
duke@1 396 public static NameImpl createSOAP11Name(String string) {
duke@1 397 return new SOAP1_1Name(string, null);
duke@1 398 }
duke@1 399 public static NameImpl createSOAP12Name(String string) {
duke@1 400 return new SOAP1_2Name(string, null);
duke@1 401 }
duke@1 402
duke@1 403 public static NameImpl createSOAP12Name(String localName, String prefix) {
duke@1 404 return new SOAP1_2Name(localName, prefix);
duke@1 405 }
duke@1 406
duke@1 407 public static NameImpl createXmlName(String localName) {
duke@1 408 return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE);
duke@1 409 }
duke@1 410
duke@1 411 public static Name copyElementName(Element element) {
duke@1 412 String localName = element.getLocalName();
duke@1 413 String prefix = element.getPrefix();
duke@1 414 String uri = element.getNamespaceURI();
duke@1 415 return create(localName, prefix, uri);
duke@1 416 }
duke@1 417
duke@1 418
duke@1 419 static class SOAP1_1Name extends NameImpl {
duke@1 420 SOAP1_1Name(String name, String prefix) {
duke@1 421 super(
duke@1 422 name,
duke@1 423 (prefix == null || prefix.equals(""))
duke@1 424 ? NameImpl.SOAP_ENVELOPE_PREFIX
duke@1 425 : prefix,
duke@1 426 NameImpl.SOAP11_NAMESPACE);
duke@1 427 }
duke@1 428 }
duke@1 429
duke@1 430 static class Envelope1_1Name extends SOAP1_1Name {
duke@1 431 Envelope1_1Name(String prefix) {
duke@1 432 super("Envelope", prefix);
duke@1 433 }
duke@1 434 }
duke@1 435
duke@1 436 static class Header1_1Name extends SOAP1_1Name {
duke@1 437 Header1_1Name(String prefix) {
duke@1 438 super("Header", prefix);
duke@1 439 }
duke@1 440 }
duke@1 441
duke@1 442 static class Body1_1Name extends SOAP1_1Name {
duke@1 443 Body1_1Name(String prefix) {
duke@1 444 super("Body", prefix);
duke@1 445 }
duke@1 446 }
duke@1 447
duke@1 448 static class Fault1_1Name extends NameImpl {
duke@1 449 Fault1_1Name(String prefix) {
duke@1 450 super(
duke@1 451 "Fault",
duke@1 452 (prefix == null || prefix.equals(""))
duke@1 453 ? SOAP_ENVELOPE_PREFIX
duke@1 454 : prefix,
duke@1 455 SOAP11_NAMESPACE);
duke@1 456 }
duke@1 457 }
duke@1 458
duke@1 459 static class Detail1_1Name extends NameImpl {
duke@1 460 Detail1_1Name() {
duke@1 461 super("detail");
duke@1 462 }
duke@1 463
duke@1 464 Detail1_1Name(String prefix) {
duke@1 465 super("detail", prefix, "");
duke@1 466 }
duke@1 467 }
duke@1 468
duke@1 469 static class FaultElement1_1Name extends NameImpl {
duke@1 470 FaultElement1_1Name(String localName) {
duke@1 471 super(localName);
duke@1 472 }
duke@1 473
duke@1 474 FaultElement1_1Name(String localName, String prefix) {
duke@1 475 super(localName, prefix, "");
duke@1 476 }
duke@1 477 }
duke@1 478
duke@1 479 static class SOAP1_2Name extends NameImpl {
duke@1 480 SOAP1_2Name(String name, String prefix) {
duke@1 481 super(
duke@1 482 name,
duke@1 483 (prefix == null || prefix.equals(""))
duke@1 484 ? SOAPConstants.SOAP_ENV_PREFIX
duke@1 485 : prefix,
duke@1 486 SOAP12_NAMESPACE);
duke@1 487 }
duke@1 488 }
duke@1 489
duke@1 490 static class Envelope1_2Name extends SOAP1_2Name {
duke@1 491 Envelope1_2Name(String prefix) {
duke@1 492 super("Envelope", prefix);
duke@1 493 }
duke@1 494 }
duke@1 495
duke@1 496 static class Header1_2Name extends SOAP1_2Name {
duke@1 497 Header1_2Name(String prefix) {
duke@1 498 super("Header", prefix);
duke@1 499 }
duke@1 500 }
duke@1 501
duke@1 502 static class Body1_2Name extends SOAP1_2Name {
duke@1 503 Body1_2Name(String prefix) {
duke@1 504 super("Body", prefix);
duke@1 505 }
duke@1 506 }
duke@1 507
duke@1 508 static class Fault1_2Name extends NameImpl {
duke@1 509 Fault1_2Name(String name, String prefix) {
duke@1 510 super(
duke@1 511 (name == null || name.equals("")) ? "Fault" : name,
duke@1 512 (prefix == null || prefix.equals(""))
duke@1 513 ? SOAPConstants.SOAP_ENV_PREFIX
duke@1 514 : prefix,
duke@1 515 SOAP12_NAMESPACE);
duke@1 516 }
duke@1 517 }
duke@1 518
duke@1 519 static class NotUnderstood1_2Name extends NameImpl {
duke@1 520 NotUnderstood1_2Name(String prefix) {
duke@1 521 super(
duke@1 522 "NotUnderstood",
duke@1 523 (prefix == null || prefix.equals(""))
duke@1 524 ? SOAPConstants.SOAP_ENV_PREFIX
duke@1 525 : prefix,
duke@1 526 SOAP12_NAMESPACE);
duke@1 527 }
duke@1 528 }
duke@1 529
duke@1 530 static class Upgrade1_2Name extends NameImpl {
duke@1 531 Upgrade1_2Name(String prefix) {
duke@1 532 super(
duke@1 533 "Upgrade",
duke@1 534 (prefix == null || prefix.equals(""))
duke@1 535 ? SOAPConstants.SOAP_ENV_PREFIX
duke@1 536 : prefix,
duke@1 537 SOAP12_NAMESPACE);
duke@1 538 }
duke@1 539 }
duke@1 540
duke@1 541 static class SupportedEnvelope1_2Name extends NameImpl {
duke@1 542 SupportedEnvelope1_2Name(String prefix) {
duke@1 543 super(
duke@1 544 "SupportedEnvelope",
duke@1 545 (prefix == null || prefix.equals(""))
duke@1 546 ? SOAPConstants.SOAP_ENV_PREFIX
duke@1 547 : prefix,
duke@1 548 SOAP12_NAMESPACE);
duke@1 549 }
duke@1 550 }
duke@1 551
duke@1 552 static class CodeSubcode1_2Name extends SOAP1_2Name {
duke@1 553 CodeSubcode1_2Name(String prefix, String localName) {
duke@1 554 super(prefix, localName);
duke@1 555 }
duke@1 556 }
duke@1 557
duke@1 558 }

mercurial