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

Sat, 01 Dec 2007 00:00:00 +0000

author
duke
date
Sat, 01 Dec 2007 00:00:00 +0000
changeset 1
0961a4a21176
child 45
31822b475baa
permissions
-rw-r--r--

Initial load

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

mercurial