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

changeset 286
f50545b5e2f1
child 368
0989ad8c0860
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/name/NameImpl.java	Tue Mar 06 16:09:35 2012 -0800
     1.3 @@ -0,0 +1,557 @@
     1.4 +/*
     1.5 + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
     1.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.7 + *
     1.8 + * This code is free software; you can redistribute it and/or modify it
     1.9 + * under the terms of the GNU General Public License version 2 only, as
    1.10 + * published by the Free Software Foundation.  Oracle designates this
    1.11 + * particular file as subject to the "Classpath" exception as provided
    1.12 + * by Oracle in the LICENSE file that accompanied this code.
    1.13 + *
    1.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
    1.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1.16 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    1.17 + * version 2 for more details (a copy is included in the LICENSE file that
    1.18 + * accompanied this code).
    1.19 + *
    1.20 + * You should have received a copy of the GNU General Public License version
    1.21 + * 2 along with this work; if not, write to the Free Software Foundation,
    1.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    1.23 + *
    1.24 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    1.25 + * or visit www.oracle.com if you need additional information or have any
    1.26 + * questions.
    1.27 + */
    1.28 +
    1.29 +package com.sun.xml.internal.messaging.saaj.soap.name;
    1.30 +
    1.31 +import java.util.logging.Level;
    1.32 +import java.util.logging.Logger;
    1.33 +
    1.34 +import javax.xml.namespace.QName;
    1.35 +import javax.xml.soap.Name;
    1.36 +import javax.xml.soap.SOAPConstants;
    1.37 +
    1.38 +//import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
    1.39 +import org.w3c.dom.Element;
    1.40 +import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
    1.41 +
    1.42 +public class NameImpl implements Name {
    1.43 +    public static final String XML_NAMESPACE_PREFIX = "xml";
    1.44 +    public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
    1.45 +    public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV";
    1.46 +
    1.47 +    public static final String XML_NAMESPACE =
    1.48 +        "http://www.w3.org/XML/1998/namespace";
    1.49 +    public static final String SOAP11_NAMESPACE =
    1.50 +        SOAPConstants.URI_NS_SOAP_ENVELOPE;
    1.51 +    public static final String SOAP12_NAMESPACE =
    1.52 +        SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
    1.53 +    public static final String XML_SCHEMA_NAMESPACE =
    1.54 +        "http://www.w3.org/2001/XMLSchema";
    1.55 +
    1.56 +    protected String uri = "";
    1.57 +    protected String localName = "";
    1.58 +    protected String prefix = "";
    1.59 +    private String qualifiedName = null;
    1.60 +
    1.61 +    protected static final Logger log =
    1.62 +        Logger.getLogger(LogDomainConstants.NAMING_DOMAIN,
    1.63 +                         "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings");
    1.64 +
    1.65 +    /**
    1.66 +     * XML Information Set REC
    1.67 +     * all namespace attributes (including those named xmlns,
    1.68 +     * whose [prefix] property has no value) have a namespace URI of http://www.w3.org/2000/xmlns/
    1.69 +     */
    1.70 +    public final static String XMLNS_URI = "http://www.w3.org/2000/xmlns/".intern();
    1.71 +
    1.72 +    protected NameImpl(String name) {
    1.73 +        this.localName = name == null ? "" : name;
    1.74 +    }
    1.75 +
    1.76 +    protected NameImpl(String name, String prefix, String uri) {
    1.77 +        this.uri = uri == null ? "" : uri;
    1.78 +        this.localName = name == null ? "" : name;
    1.79 +        this.prefix = prefix == null ? "" : prefix;
    1.80 +
    1.81 +        if (this.prefix.equals("xmlns") && this.uri.equals("")) {
    1.82 +            this.uri = XMLNS_URI;
    1.83 +        }
    1.84 +        if (this.uri.equals(XMLNS_URI) && this.prefix.equals("")) {
    1.85 +            this.prefix = "xmlns";
    1.86 +        }
    1.87 +    }
    1.88 +
    1.89 +    public static Name convertToName(QName qname) {
    1.90 +        return new NameImpl(qname.getLocalPart(),
    1.91 +                            qname.getPrefix(),
    1.92 +                            qname.getNamespaceURI());
    1.93 +    }
    1.94 +
    1.95 +    public static QName convertToQName(Name name) {
    1.96 +        return new QName(name.getURI(),
    1.97 +                         name.getLocalName(),
    1.98 +                         name.getPrefix());
    1.99 +    }
   1.100 +
   1.101 +    public static NameImpl createFromUnqualifiedName(String name) {
   1.102 +        return new NameImpl(name);
   1.103 +    }
   1.104 +
   1.105 +    public static Name createFromTagName(String tagName) {
   1.106 +        return createFromTagAndUri(tagName, "");
   1.107 +    }
   1.108 +
   1.109 +    public static Name createFromQualifiedName(
   1.110 +        String qualifiedName,
   1.111 +        String uri) {
   1.112 +        return createFromTagAndUri(qualifiedName, uri);
   1.113 +    }
   1.114 +
   1.115 +    protected static Name createFromTagAndUri(String tagName, String uri) {
   1.116 +        if (tagName == null) {
   1.117 +            log.severe("SAAJ0201.name.not.created.from.null.tag");
   1.118 +            throw new IllegalArgumentException("Cannot create a name from a null tag.");
   1.119 +        }
   1.120 +        int index = tagName.indexOf(':');
   1.121 +        if (index < 0) {
   1.122 +            return new NameImpl(tagName, "", uri);
   1.123 +        } else {
   1.124 +            return new NameImpl(
   1.125 +                tagName.substring(index + 1),
   1.126 +                tagName.substring(0, index),
   1.127 +                uri);
   1.128 +        }
   1.129 +    }
   1.130 +
   1.131 +    protected static int getPrefixSeparatorIndex(String qualifiedName) {
   1.132 +        int index = qualifiedName.indexOf(':');
   1.133 +        if (index < 0) {
   1.134 +            log.log(
   1.135 +                Level.SEVERE,
   1.136 +                "SAAJ0202.name.invalid.arg.format",
   1.137 +                new String[] { qualifiedName });
   1.138 +            throw new IllegalArgumentException(
   1.139 +                "Argument \""
   1.140 +                    + qualifiedName
   1.141 +                    + "\" must be of the form: \"prefix:localName\"");
   1.142 +        }
   1.143 +        return index;
   1.144 +    }
   1.145 +
   1.146 +    public static String getPrefixFromQualifiedName(String qualifiedName) {
   1.147 +        return qualifiedName.substring(
   1.148 +            0,
   1.149 +            getPrefixSeparatorIndex(qualifiedName));
   1.150 +    }
   1.151 +
   1.152 +    public static String getLocalNameFromQualifiedName(String qualifiedName) {
   1.153 +        return qualifiedName.substring(
   1.154 +            getPrefixSeparatorIndex(qualifiedName) + 1);
   1.155 +    }
   1.156 +
   1.157 +    public static String getPrefixFromTagName(String tagName) {
   1.158 +        if (isQualified(tagName)) {
   1.159 +            return getPrefixFromQualifiedName(tagName);
   1.160 +        }
   1.161 +        return "";
   1.162 +    }
   1.163 +
   1.164 +    public static String getLocalNameFromTagName(String tagName) {
   1.165 +        if (isQualified(tagName)) {
   1.166 +            return getLocalNameFromQualifiedName(tagName);
   1.167 +        }
   1.168 +        return tagName;
   1.169 +    }
   1.170 +
   1.171 +    public static boolean isQualified(String tagName) {
   1.172 +        return tagName.indexOf(':') >= 0;
   1.173 +    }
   1.174 +
   1.175 +    public static NameImpl create(String name, String prefix, String uri) {
   1.176 +        if (prefix == null)
   1.177 +            prefix = "";
   1.178 +        if (uri == null)
   1.179 +            uri = "";
   1.180 +        if (name == null)
   1.181 +            name = "";
   1.182 +
   1.183 +        if (!uri.equals("") && !name.equals("")) {
   1.184 +            if (uri.equals(NameImpl.SOAP11_NAMESPACE)) {
   1.185 +                if (name.equalsIgnoreCase("Envelope"))
   1.186 +                    return createEnvelope1_1Name(prefix);
   1.187 +                else if (name.equalsIgnoreCase("Header"))
   1.188 +                    return createHeader1_1Name(prefix);
   1.189 +                else if (name.equalsIgnoreCase("Body"))
   1.190 +                    return createBody1_1Name(prefix);
   1.191 +                else if (name.equalsIgnoreCase("Fault"))
   1.192 +                    return createFault1_1Name(prefix);
   1.193 +                else
   1.194 +                    return new SOAP1_1Name(name, prefix);
   1.195 +            } else if (uri.equals(SOAP12_NAMESPACE)) {
   1.196 +                if (name.equalsIgnoreCase("Envelope"))
   1.197 +                    return createEnvelope1_2Name(prefix);
   1.198 +                else if (name.equalsIgnoreCase("Header"))
   1.199 +                    return createHeader1_2Name(prefix);
   1.200 +                else if (name.equalsIgnoreCase("Body"))
   1.201 +                    return createBody1_2Name(prefix);
   1.202 +                else if (
   1.203 +                    name.equals("Fault")
   1.204 +                        || name.equals("Reason")
   1.205 +                        || name.equals("Detail"))
   1.206 +                    return createFault1_2Name(name, prefix);
   1.207 +                else if (name.equals("Code") || name.equals("Subcode"))
   1.208 +                    return createCodeSubcode1_2Name(prefix, name);
   1.209 +                else
   1.210 +                    return new SOAP1_2Name(name, prefix);
   1.211 +            }
   1.212 +
   1.213 +        }
   1.214 +        return new NameImpl(name, prefix, uri);
   1.215 +    }
   1.216 +
   1.217 +    public static String createQName(String prefix, String localName) {
   1.218 +        if (prefix == null || prefix.equals("")) {
   1.219 +            return localName;
   1.220 +        }
   1.221 +        return prefix + ":" + localName;
   1.222 +    }
   1.223 +
   1.224 +    public boolean equals(Object obj) {
   1.225 +        if (!(obj instanceof Name)) {
   1.226 +            return false;
   1.227 +        }
   1.228 +
   1.229 +        Name otherName = (Name) obj;
   1.230 +
   1.231 +        if (!uri.equals(otherName.getURI())) {
   1.232 +            return false;
   1.233 +        }
   1.234 +
   1.235 +        if (!localName.equals(otherName.getLocalName())) {
   1.236 +            return false;
   1.237 +        }
   1.238 +
   1.239 +        return true;
   1.240 +    }
   1.241 +
   1.242 +    /**
   1.243 +     * Get the local name part of this XML Name.
   1.244 +     *
   1.245 +     * @return a string for the local name.
   1.246 +     */
   1.247 +    public String getLocalName() {
   1.248 +        return localName;
   1.249 +    }
   1.250 +
   1.251 +    /* getQualifiedName is inherited from QName */
   1.252 +
   1.253 +    /**
   1.254 +     * Returns the prefix associated with the namespace of the name.
   1.255 +     *
   1.256 +     * @return the prefix as a string.
   1.257 +     */
   1.258 +    public String getPrefix() {
   1.259 +        return prefix;
   1.260 +    }
   1.261 +
   1.262 +    /**
   1.263 +     * Returns the URI associated of the namespace.
   1.264 +     *
   1.265 +     * @return the uri as a string.
   1.266 +     */
   1.267 +    public String getURI() {
   1.268 +        return uri;
   1.269 +    }
   1.270 +
   1.271 +    /**
   1.272 +     * Returns a String version of the name suitable for use in an XML document.
   1.273 +     */
   1.274 +    public String getQualifiedName() {
   1.275 +        if (qualifiedName == null) {
   1.276 +            if (prefix != null && prefix.length() > 0) {
   1.277 +                qualifiedName = prefix + ":" + localName;
   1.278 +            } else {
   1.279 +                qualifiedName = localName;
   1.280 +            }
   1.281 +        }
   1.282 +        return qualifiedName;
   1.283 +    }
   1.284 +
   1.285 +    /**
   1.286 +     * Create a name object for a SOAP1.1 Envelope.
   1.287 +     */
   1.288 +    public static NameImpl createEnvelope1_1Name(String prefix) {
   1.289 +        return new Envelope1_1Name(prefix);
   1.290 +    }
   1.291 +
   1.292 +    /**
   1.293 +     * Create a name object for a SOAP1.2 Envelope.
   1.294 +     */
   1.295 +    public static NameImpl createEnvelope1_2Name(String prefix) {
   1.296 +        return new Envelope1_2Name(prefix);
   1.297 +    }
   1.298 +
   1.299 +    /**
   1.300 +     * Create a name object for a SOAP1.1 Header.
   1.301 +     */
   1.302 +    public static NameImpl createHeader1_1Name(String prefix) {
   1.303 +        return new Header1_1Name(prefix);
   1.304 +    }
   1.305 +
   1.306 +    /**
   1.307 +     * Create a name object for a SOAP1.2 Header.
   1.308 +     */
   1.309 +    public static NameImpl createHeader1_2Name(String prefix) {
   1.310 +        return new Header1_2Name(prefix);
   1.311 +    }
   1.312 +
   1.313 +    /**
   1.314 +     * Create a name object for a SOAP1.1 Body.
   1.315 +     */
   1.316 +    public static NameImpl createBody1_1Name(String prefix) {
   1.317 +        return new Body1_1Name(prefix);
   1.318 +    }
   1.319 +
   1.320 +    /**
   1.321 +     * Create a name object for a SOAP1.2 Body.
   1.322 +     */
   1.323 +    public static NameImpl createBody1_2Name(String prefix) {
   1.324 +        return new Body1_2Name(prefix);
   1.325 +    }
   1.326 +
   1.327 +    /**
   1.328 +     * Create a name object for a SOAP1.1 Fault.
   1.329 +     */
   1.330 +    public static NameImpl createFault1_1Name(String prefix) {
   1.331 +        return new Fault1_1Name(prefix);
   1.332 +    }
   1.333 +
   1.334 +    /**
   1.335 +      * Create a name object for a SOAP1.2 NotUnderstood element.
   1.336 +      */
   1.337 +    public static NameImpl createNotUnderstood1_2Name(String prefix) {
   1.338 +        return new NotUnderstood1_2Name(prefix);
   1.339 +    }
   1.340 +
   1.341 +    /**
   1.342 +     * Create a name object for a SOAP1.2 Upgrade element.
   1.343 +     */
   1.344 +    public static NameImpl createUpgrade1_2Name(String prefix) {
   1.345 +        return new Upgrade1_2Name(prefix);
   1.346 +    }
   1.347 +
   1.348 +    /**
   1.349 +     * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element.
   1.350 +     */
   1.351 +    public static NameImpl createSupportedEnvelope1_2Name(String prefix) {
   1.352 +        return new SupportedEnvelope1_2Name(prefix);
   1.353 +    }
   1.354 +
   1.355 +    /**
   1.356 +     * Create a name object for a SOAP1.2
   1.357 +     * Fault, Reason or Detail.
   1.358 +     *
   1.359 +     * @param localName Local Name of element
   1.360 +     */
   1.361 +    public static NameImpl createFault1_2Name(
   1.362 +        String localName,
   1.363 +        String prefix) {
   1.364 +        return new Fault1_2Name(localName, prefix);
   1.365 +    }
   1.366 +
   1.367 +    /**
   1.368 +     * Create a name object for a SOAP1.2 Fault/Code or Subcode.
   1.369 +     *
   1.370 +     * @param localName Either "Code" or "Subcode"
   1.371 +     */
   1.372 +    public static NameImpl createCodeSubcode1_2Name(
   1.373 +        String prefix,
   1.374 +        String localName) {
   1.375 +        return new CodeSubcode1_2Name(localName, prefix);
   1.376 +    }
   1.377 +
   1.378 +    /**
   1.379 +     * Create a name object for a SOAP1.1 Fault Detail.
   1.380 +     */
   1.381 +    public static NameImpl createDetail1_1Name() {
   1.382 +        return new Detail1_1Name();
   1.383 +    }
   1.384 +
   1.385 +    public static NameImpl createDetail1_1Name(String prefix) {
   1.386 +        return new Detail1_1Name(prefix);
   1.387 +    }
   1.388 +
   1.389 +    public static NameImpl createFaultElement1_1Name(String localName) {
   1.390 +        return new FaultElement1_1Name(localName);
   1.391 +    }
   1.392 +
   1.393 +    public static NameImpl createFaultElement1_1Name(String localName,
   1.394 +                                                     String prefix) {
   1.395 +        return new FaultElement1_1Name(localName, prefix);
   1.396 +    }
   1.397 +
   1.398 +    public static NameImpl createSOAP11Name(String string) {
   1.399 +        return new SOAP1_1Name(string, null);
   1.400 +    }
   1.401 +    public static NameImpl createSOAP12Name(String string) {
   1.402 +        return new SOAP1_2Name(string, null);
   1.403 +    }
   1.404 +
   1.405 +    public static NameImpl createSOAP12Name(String localName, String prefix) {
   1.406 +        return new SOAP1_2Name(localName, prefix);
   1.407 +    }
   1.408 +
   1.409 +    public static NameImpl createXmlName(String localName) {
   1.410 +        return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE);
   1.411 +    }
   1.412 +
   1.413 +    public static Name copyElementName(Element element) {
   1.414 +        String localName = element.getLocalName();
   1.415 +        String prefix = element.getPrefix();
   1.416 +        String uri = element.getNamespaceURI();
   1.417 +        return create(localName, prefix, uri);
   1.418 +    }
   1.419 +
   1.420 +
   1.421 +static class SOAP1_1Name extends NameImpl {
   1.422 +    SOAP1_1Name(String name, String prefix) {
   1.423 +        super(
   1.424 +            name,
   1.425 +            (prefix == null || prefix.equals(""))
   1.426 +                ? NameImpl.SOAP_ENVELOPE_PREFIX
   1.427 +                : prefix,
   1.428 +            NameImpl.SOAP11_NAMESPACE);
   1.429 +    }
   1.430 +}
   1.431 +
   1.432 +static class Envelope1_1Name extends SOAP1_1Name {
   1.433 +    Envelope1_1Name(String prefix) {
   1.434 +        super("Envelope", prefix);
   1.435 +    }
   1.436 +}
   1.437 +
   1.438 +static class Header1_1Name extends SOAP1_1Name {
   1.439 +    Header1_1Name(String prefix) {
   1.440 +        super("Header", prefix);
   1.441 +    }
   1.442 +}
   1.443 +
   1.444 +static class Body1_1Name extends SOAP1_1Name {
   1.445 +    Body1_1Name(String prefix) {
   1.446 +        super("Body", prefix);
   1.447 +    }
   1.448 +}
   1.449 +
   1.450 +static class Fault1_1Name extends NameImpl {
   1.451 +    Fault1_1Name(String prefix) {
   1.452 +        super(
   1.453 +            "Fault",
   1.454 +            (prefix == null || prefix.equals(""))
   1.455 +                ? SOAP_ENVELOPE_PREFIX
   1.456 +                : prefix,
   1.457 +            SOAP11_NAMESPACE);
   1.458 +    }
   1.459 +}
   1.460 +
   1.461 +static class Detail1_1Name extends NameImpl {
   1.462 +    Detail1_1Name() {
   1.463 +        super("detail");
   1.464 +    }
   1.465 +
   1.466 +    Detail1_1Name(String prefix) {
   1.467 +        super("detail", prefix, "");
   1.468 +    }
   1.469 +}
   1.470 +
   1.471 +static class FaultElement1_1Name extends NameImpl {
   1.472 +    FaultElement1_1Name(String localName) {
   1.473 +        super(localName);
   1.474 +    }
   1.475 +
   1.476 +    FaultElement1_1Name(String localName, String prefix) {
   1.477 +        super(localName, prefix, "");
   1.478 +    }
   1.479 +}
   1.480 +
   1.481 +static class SOAP1_2Name extends NameImpl {
   1.482 +    SOAP1_2Name(String name, String prefix) {
   1.483 +        super(
   1.484 +            name,
   1.485 +            (prefix == null || prefix.equals(""))
   1.486 +                ? SOAPConstants.SOAP_ENV_PREFIX
   1.487 +                : prefix,
   1.488 +            SOAP12_NAMESPACE);
   1.489 +    }
   1.490 +}
   1.491 +
   1.492 +static class Envelope1_2Name extends SOAP1_2Name {
   1.493 +    Envelope1_2Name(String prefix) {
   1.494 +        super("Envelope", prefix);
   1.495 +    }
   1.496 +}
   1.497 +
   1.498 +static class Header1_2Name extends SOAP1_2Name {
   1.499 +    Header1_2Name(String prefix) {
   1.500 +        super("Header", prefix);
   1.501 +    }
   1.502 +}
   1.503 +
   1.504 +static class Body1_2Name extends SOAP1_2Name {
   1.505 +    Body1_2Name(String prefix) {
   1.506 +        super("Body", prefix);
   1.507 +    }
   1.508 +}
   1.509 +
   1.510 +static class Fault1_2Name extends NameImpl {
   1.511 +    Fault1_2Name(String name, String prefix) {
   1.512 +        super(
   1.513 +            (name == null || name.equals("")) ? "Fault" : name,
   1.514 +            (prefix == null || prefix.equals(""))
   1.515 +                ? SOAPConstants.SOAP_ENV_PREFIX
   1.516 +                : prefix,
   1.517 +            SOAP12_NAMESPACE);
   1.518 +    }
   1.519 +}
   1.520 +
   1.521 +static class NotUnderstood1_2Name extends NameImpl {
   1.522 +    NotUnderstood1_2Name(String prefix) {
   1.523 +        super(
   1.524 +            "NotUnderstood",
   1.525 +            (prefix == null || prefix.equals(""))
   1.526 +                ? SOAPConstants.SOAP_ENV_PREFIX
   1.527 +                : prefix,
   1.528 +            SOAP12_NAMESPACE);
   1.529 +    }
   1.530 +}
   1.531 +
   1.532 +static class Upgrade1_2Name extends NameImpl {
   1.533 +    Upgrade1_2Name(String prefix) {
   1.534 +        super(
   1.535 +            "Upgrade",
   1.536 +            (prefix == null || prefix.equals(""))
   1.537 +                ? SOAPConstants.SOAP_ENV_PREFIX
   1.538 +                : prefix,
   1.539 +            SOAP12_NAMESPACE);
   1.540 +    }
   1.541 +}
   1.542 +
   1.543 +static class SupportedEnvelope1_2Name extends NameImpl {
   1.544 +    SupportedEnvelope1_2Name(String prefix) {
   1.545 +        super(
   1.546 +            "SupportedEnvelope",
   1.547 +            (prefix == null || prefix.equals(""))
   1.548 +                ? SOAPConstants.SOAP_ENV_PREFIX
   1.549 +                : prefix,
   1.550 +            SOAP12_NAMESPACE);
   1.551 +    }
   1.552 +}
   1.553 +
   1.554 +static class CodeSubcode1_2Name extends SOAP1_2Name {
   1.555 +    CodeSubcode1_2Name(String prefix, String localName) {
   1.556 +        super(prefix, localName);
   1.557 +    }
   1.558 +}
   1.559 +
   1.560 +}

mercurial