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

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 368
0989ad8c0860
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 1997, 2012, 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  */
    26 package com.sun.xml.internal.messaging.saaj.soap.name;
    28 import java.util.logging.Level;
    29 import java.util.logging.Logger;
    31 import javax.xml.namespace.QName;
    32 import javax.xml.soap.Name;
    33 import javax.xml.soap.SOAPConstants;
    35 //import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
    36 import org.w3c.dom.Element;
    37 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
    39 public class NameImpl implements Name {
    40     public static final String XML_NAMESPACE_PREFIX = "xml";
    41     public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
    42     public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV";
    44     public static final String XML_NAMESPACE =
    45         "http://www.w3.org/XML/1998/namespace";
    46     public static final String SOAP11_NAMESPACE =
    47         SOAPConstants.URI_NS_SOAP_ENVELOPE;
    48     public static final String SOAP12_NAMESPACE =
    49         SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
    50     public static final String XML_SCHEMA_NAMESPACE =
    51         "http://www.w3.org/2001/XMLSchema";
    53     protected String uri = "";
    54     protected String localName = "";
    55     protected String prefix = "";
    56     private String qualifiedName = null;
    58     protected static final Logger log =
    59         Logger.getLogger(LogDomainConstants.NAMING_DOMAIN,
    60                          "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings");
    62     /**
    63      * XML Information Set REC
    64      * all namespace attributes (including those named xmlns,
    65      * whose [prefix] property has no value) have a namespace URI of http://www.w3.org/2000/xmlns/
    66      */
    67     public final static String XMLNS_URI = "http://www.w3.org/2000/xmlns/".intern();
    69     protected NameImpl(String name) {
    70         this.localName = name == null ? "" : name;
    71     }
    73     protected NameImpl(String name, String prefix, String uri) {
    74         this.uri = uri == null ? "" : uri;
    75         this.localName = name == null ? "" : name;
    76         this.prefix = prefix == null ? "" : prefix;
    78         if (this.prefix.equals("xmlns") && this.uri.equals("")) {
    79             this.uri = XMLNS_URI;
    80         }
    81         if (this.uri.equals(XMLNS_URI) && this.prefix.equals("")) {
    82             this.prefix = "xmlns";
    83         }
    84     }
    86     public static Name convertToName(QName qname) {
    87         return new NameImpl(qname.getLocalPart(),
    88                             qname.getPrefix(),
    89                             qname.getNamespaceURI());
    90     }
    92     public static QName convertToQName(Name name) {
    93         return new QName(name.getURI(),
    94                          name.getLocalName(),
    95                          name.getPrefix());
    96     }
    98     public static NameImpl createFromUnqualifiedName(String name) {
    99         return new NameImpl(name);
   100     }
   102     public static Name createFromTagName(String tagName) {
   103         return createFromTagAndUri(tagName, "");
   104     }
   106     public static Name createFromQualifiedName(
   107         String qualifiedName,
   108         String uri) {
   109         return createFromTagAndUri(qualifiedName, uri);
   110     }
   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     }
   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     }
   143     public static String getPrefixFromQualifiedName(String qualifiedName) {
   144         return qualifiedName.substring(
   145             0,
   146             getPrefixSeparatorIndex(qualifiedName));
   147     }
   149     public static String getLocalNameFromQualifiedName(String qualifiedName) {
   150         return qualifiedName.substring(
   151             getPrefixSeparatorIndex(qualifiedName) + 1);
   152     }
   154     public static String getPrefixFromTagName(String tagName) {
   155         if (isQualified(tagName)) {
   156             return getPrefixFromQualifiedName(tagName);
   157         }
   158         return "";
   159     }
   161     public static String getLocalNameFromTagName(String tagName) {
   162         if (isQualified(tagName)) {
   163             return getLocalNameFromQualifiedName(tagName);
   164         }
   165         return tagName;
   166     }
   168     public static boolean isQualified(String tagName) {
   169         return tagName.indexOf(':') >= 0;
   170     }
   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 = "";
   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             }
   210         }
   211         return new NameImpl(name, prefix, uri);
   212     }
   214     public static String createQName(String prefix, String localName) {
   215         if (prefix == null || prefix.equals("")) {
   216             return localName;
   217         }
   218         return prefix + ":" + localName;
   219     }
   221     public boolean equals(Object obj) {
   222         if (!(obj instanceof Name)) {
   223             return false;
   224         }
   226         Name otherName = (Name) obj;
   228         if (!uri.equals(otherName.getURI())) {
   229             return false;
   230         }
   232         if (!localName.equals(otherName.getLocalName())) {
   233             return false;
   234         }
   236         return true;
   237     }
   239     public int hashCode() {
   240         return localName.hashCode();
   241     }
   243     /**
   244      * Get the local name part of this XML Name.
   245      *
   246      * @return a string for the local name.
   247      */
   248     public String getLocalName() {
   249         return localName;
   250     }
   252     /* getQualifiedName is inherited from QName */
   254     /**
   255      * Returns the prefix associated with the namespace of the name.
   256      *
   257      * @return the prefix as a string.
   258      */
   259     public String getPrefix() {
   260         return prefix;
   261     }
   263     /**
   264      * Returns the URI associated of the namespace.
   265      *
   266      * @return the uri as a string.
   267      */
   268     public String getURI() {
   269         return uri;
   270     }
   272     /**
   273      * Returns a String version of the name suitable for use in an XML document.
   274      */
   275     public String getQualifiedName() {
   276         if (qualifiedName == null) {
   277             if (prefix != null && prefix.length() > 0) {
   278                 qualifiedName = prefix + ":" + localName;
   279             } else {
   280                 qualifiedName = localName;
   281             }
   282         }
   283         return qualifiedName;
   284     }
   286     /**
   287      * Create a name object for a SOAP1.1 Envelope.
   288      */
   289     public static NameImpl createEnvelope1_1Name(String prefix) {
   290         return new Envelope1_1Name(prefix);
   291     }
   293     /**
   294      * Create a name object for a SOAP1.2 Envelope.
   295      */
   296     public static NameImpl createEnvelope1_2Name(String prefix) {
   297         return new Envelope1_2Name(prefix);
   298     }
   300     /**
   301      * Create a name object for a SOAP1.1 Header.
   302      */
   303     public static NameImpl createHeader1_1Name(String prefix) {
   304         return new Header1_1Name(prefix);
   305     }
   307     /**
   308      * Create a name object for a SOAP1.2 Header.
   309      */
   310     public static NameImpl createHeader1_2Name(String prefix) {
   311         return new Header1_2Name(prefix);
   312     }
   314     /**
   315      * Create a name object for a SOAP1.1 Body.
   316      */
   317     public static NameImpl createBody1_1Name(String prefix) {
   318         return new Body1_1Name(prefix);
   319     }
   321     /**
   322      * Create a name object for a SOAP1.2 Body.
   323      */
   324     public static NameImpl createBody1_2Name(String prefix) {
   325         return new Body1_2Name(prefix);
   326     }
   328     /**
   329      * Create a name object for a SOAP1.1 Fault.
   330      */
   331     public static NameImpl createFault1_1Name(String prefix) {
   332         return new Fault1_1Name(prefix);
   333     }
   335     /**
   336       * Create a name object for a SOAP1.2 NotUnderstood element.
   337       */
   338     public static NameImpl createNotUnderstood1_2Name(String prefix) {
   339         return new NotUnderstood1_2Name(prefix);
   340     }
   342     /**
   343      * Create a name object for a SOAP1.2 Upgrade element.
   344      */
   345     public static NameImpl createUpgrade1_2Name(String prefix) {
   346         return new Upgrade1_2Name(prefix);
   347     }
   349     /**
   350      * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element.
   351      */
   352     public static NameImpl createSupportedEnvelope1_2Name(String prefix) {
   353         return new SupportedEnvelope1_2Name(prefix);
   354     }
   356     /**
   357      * Create a name object for a SOAP1.2
   358      * Fault, Reason or Detail.
   359      *
   360      * @param localName Local Name of element
   361      */
   362     public static NameImpl createFault1_2Name(
   363         String localName,
   364         String prefix) {
   365         return new Fault1_2Name(localName, prefix);
   366     }
   368     /**
   369      * Create a name object for a SOAP1.2 Fault/Code or Subcode.
   370      *
   371      * @param localName Either "Code" or "Subcode"
   372      */
   373     public static NameImpl createCodeSubcode1_2Name(
   374         String prefix,
   375         String localName) {
   376         return new CodeSubcode1_2Name(localName, prefix);
   377     }
   379     /**
   380      * Create a name object for a SOAP1.1 Fault Detail.
   381      */
   382     public static NameImpl createDetail1_1Name() {
   383         return new Detail1_1Name();
   384     }
   386     public static NameImpl createDetail1_1Name(String prefix) {
   387         return new Detail1_1Name(prefix);
   388     }
   390     public static NameImpl createFaultElement1_1Name(String localName) {
   391         return new FaultElement1_1Name(localName);
   392     }
   394     public static NameImpl createFaultElement1_1Name(String localName,
   395                                                      String prefix) {
   396         return new FaultElement1_1Name(localName, prefix);
   397     }
   399     public static NameImpl createSOAP11Name(String string) {
   400         return new SOAP1_1Name(string, null);
   401     }
   402     public static NameImpl createSOAP12Name(String string) {
   403         return new SOAP1_2Name(string, null);
   404     }
   406     public static NameImpl createSOAP12Name(String localName, String prefix) {
   407         return new SOAP1_2Name(localName, prefix);
   408     }
   410     public static NameImpl createXmlName(String localName) {
   411         return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE);
   412     }
   414     public static Name copyElementName(Element element) {
   415         String localName = element.getLocalName();
   416         String prefix = element.getPrefix();
   417         String uri = element.getNamespaceURI();
   418         return create(localName, prefix, uri);
   419     }
   422 static class SOAP1_1Name extends NameImpl {
   423     SOAP1_1Name(String name, String prefix) {
   424         super(
   425             name,
   426             (prefix == null || prefix.equals(""))
   427                 ? NameImpl.SOAP_ENVELOPE_PREFIX
   428                 : prefix,
   429             NameImpl.SOAP11_NAMESPACE);
   430     }
   431 }
   433 static class Envelope1_1Name extends SOAP1_1Name {
   434     Envelope1_1Name(String prefix) {
   435         super("Envelope", prefix);
   436     }
   437 }
   439 static class Header1_1Name extends SOAP1_1Name {
   440     Header1_1Name(String prefix) {
   441         super("Header", prefix);
   442     }
   443 }
   445 static class Body1_1Name extends SOAP1_1Name {
   446     Body1_1Name(String prefix) {
   447         super("Body", prefix);
   448     }
   449 }
   451 static class Fault1_1Name extends NameImpl {
   452     Fault1_1Name(String prefix) {
   453         super(
   454             "Fault",
   455             (prefix == null || prefix.equals(""))
   456                 ? SOAP_ENVELOPE_PREFIX
   457                 : prefix,
   458             SOAP11_NAMESPACE);
   459     }
   460 }
   462 static class Detail1_1Name extends NameImpl {
   463     Detail1_1Name() {
   464         super("detail");
   465     }
   467     Detail1_1Name(String prefix) {
   468         super("detail", prefix, "");
   469     }
   470 }
   472 static class FaultElement1_1Name extends NameImpl {
   473     FaultElement1_1Name(String localName) {
   474         super(localName);
   475     }
   477     FaultElement1_1Name(String localName, String prefix) {
   478         super(localName, prefix, "");
   479     }
   480 }
   482 static class SOAP1_2Name extends NameImpl {
   483     SOAP1_2Name(String name, String prefix) {
   484         super(
   485             name,
   486             (prefix == null || prefix.equals(""))
   487                 ? SOAPConstants.SOAP_ENV_PREFIX
   488                 : prefix,
   489             SOAP12_NAMESPACE);
   490     }
   491 }
   493 static class Envelope1_2Name extends SOAP1_2Name {
   494     Envelope1_2Name(String prefix) {
   495         super("Envelope", prefix);
   496     }
   497 }
   499 static class Header1_2Name extends SOAP1_2Name {
   500     Header1_2Name(String prefix) {
   501         super("Header", prefix);
   502     }
   503 }
   505 static class Body1_2Name extends SOAP1_2Name {
   506     Body1_2Name(String prefix) {
   507         super("Body", prefix);
   508     }
   509 }
   511 static class Fault1_2Name extends NameImpl {
   512     Fault1_2Name(String name, String prefix) {
   513         super(
   514             (name == null || name.equals("")) ? "Fault" : name,
   515             (prefix == null || prefix.equals(""))
   516                 ? SOAPConstants.SOAP_ENV_PREFIX
   517                 : prefix,
   518             SOAP12_NAMESPACE);
   519     }
   520 }
   522 static class NotUnderstood1_2Name extends NameImpl {
   523     NotUnderstood1_2Name(String prefix) {
   524         super(
   525             "NotUnderstood",
   526             (prefix == null || prefix.equals(""))
   527                 ? SOAPConstants.SOAP_ENV_PREFIX
   528                 : prefix,
   529             SOAP12_NAMESPACE);
   530     }
   531 }
   533 static class Upgrade1_2Name extends NameImpl {
   534     Upgrade1_2Name(String prefix) {
   535         super(
   536             "Upgrade",
   537             (prefix == null || prefix.equals(""))
   538                 ? SOAPConstants.SOAP_ENV_PREFIX
   539                 : prefix,
   540             SOAP12_NAMESPACE);
   541     }
   542 }
   544 static class SupportedEnvelope1_2Name extends NameImpl {
   545     SupportedEnvelope1_2Name(String prefix) {
   546         super(
   547             "SupportedEnvelope",
   548             (prefix == null || prefix.equals(""))
   549                 ? SOAPConstants.SOAP_ENV_PREFIX
   550                 : prefix,
   551             SOAP12_NAMESPACE);
   552     }
   553 }
   555 static class CodeSubcode1_2Name extends SOAP1_2Name {
   556     CodeSubcode1_2Name(String prefix, String localName) {
   557         super(prefix, localName);
   558     }
   559 }
   561 }

mercurial