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

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

mercurial