src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ver1_1/Fault1_1Impl.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 /**
    27 *
    28 * @author SAAJ RI Development Team
    29 */
    30 package com.sun.xml.internal.messaging.saaj.soap.ver1_1;
    32 import java.util.Iterator;
    33 import java.util.Locale;
    34 import java.util.logging.Logger;
    35 import java.util.logging.Level;
    37 import javax.xml.namespace.QName;
    38 import javax.xml.soap.SOAPElement;
    39 import javax.xml.soap.SOAPFaultElement;
    40 import javax.xml.soap.SOAPException;
    41 import javax.xml.soap.SOAPConstants;
    42 import javax.xml.soap.Name;
    43 import javax.xml.soap.Name;
    45 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
    46 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
    47 import com.sun.xml.internal.messaging.saaj.soap.impl.*;
    48 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
    49 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
    50 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
    53 public class Fault1_1Impl extends FaultImpl {
    55     protected static final Logger log =
    56         Logger.getLogger(
    57             LogDomainConstants.SOAP_VER1_1_DOMAIN,
    58             "com.sun.xml.internal.messaging.saaj.soap.ver1_1.LocalStrings");
    60     public Fault1_1Impl(SOAPDocumentImpl ownerDocument, String prefix) {
    61        super(ownerDocument, NameImpl.createFault1_1Name(prefix));
    62     }
    64     protected NameImpl getDetailName() {
    65         return NameImpl.createDetail1_1Name();
    66     }
    68     protected NameImpl getFaultCodeName() {
    69         return NameImpl.createFromUnqualifiedName("faultcode");
    70     }
    72     protected NameImpl getFaultStringName() {
    73         return NameImpl.createFromUnqualifiedName("faultstring");
    74     }
    76     protected NameImpl getFaultActorName() {
    77         return NameImpl.createFromUnqualifiedName("faultactor");
    78     }
    80     protected DetailImpl createDetail() {
    81         return new Detail1_1Impl(
    82                        ((SOAPDocument) getOwnerDocument()).getDocument());
    83     }
    85     protected FaultElementImpl createSOAPFaultElement(String localName) {
    86         return new FaultElement1_1Impl(
    87                        ((SOAPDocument) getOwnerDocument()).getDocument(),
    88                        localName);
    89     }
    91     protected void checkIfStandardFaultCode(String faultCode, String uri)
    92         throws SOAPException {
    93         // SOAP 1.1 doesn't seem to mandate using faultcode from a particular
    94         // set of values.
    95         // Also need to be backward compatible.
    96     }
    98     protected void finallySetFaultCode(String faultcode) throws SOAPException {
    99         this.faultCodeElement.addTextNode(faultcode);
   100     }
   102     public String getFaultCode() {
   103         if (this.faultCodeElement == null)
   104             findFaultCodeElement();
   105         return this.faultCodeElement.getValue();
   106     }
   108     public Name getFaultCodeAsName() {
   110         String faultcodeString = getFaultCode();
   111         if (faultcodeString == null) {
   112             return null;
   113         }
   114         int prefixIndex = faultcodeString.indexOf(':');
   115         if (prefixIndex == -1) {
   116             // Not a valid SOAP message, but we return the unqualified name
   117             // anyway since some apps do not strictly conform to SOAP
   118             // specs.  A message that does not contain a <faultcode>
   119             // element itself is also not valid in which case we return
   120             // null instead of throwing an exception so this is consistent.
   121             return NameImpl.createFromUnqualifiedName(faultcodeString);
   122         }
   124         // Get the prefix and map it to a namespace name (AKA namespace URI)
   125         String prefix = faultcodeString.substring(0, prefixIndex);
   126         if (this.faultCodeElement == null)
   127             findFaultCodeElement();
   128         String nsName = this.faultCodeElement.getNamespaceURI(prefix);
   129         return NameImpl.createFromQualifiedName(faultcodeString, nsName);
   130     }
   132     public QName getFaultCodeAsQName() {
   133         String faultcodeString = getFaultCode();
   134         if (faultcodeString == null) {
   135             return null;
   136         }
   137         if (this.faultCodeElement == null)
   138             findFaultCodeElement();
   139         return convertCodeToQName(faultcodeString, this.faultCodeElement);
   140     }
   142     public void setFaultString(String faultString) throws SOAPException {
   144         if (this.faultStringElement == null)
   145             findFaultStringElement();
   147         if (this.faultStringElement == null)
   148             this.faultStringElement = addSOAPFaultElement("faultstring");
   149         else {
   150             this.faultStringElement.removeContents();
   151             //this.faultStringElement.removeAttributeNS("http://www.w3.org/XML/1998/namespace", "lang");
   152             this.faultStringElement.removeAttribute("xml:lang");
   153         }
   155         this.faultStringElement.addTextNode(faultString);
   156     }
   158     public String getFaultString() {
   159         if (this.faultStringElement == null)
   160             findFaultStringElement();
   161         return this.faultStringElement.getValue();
   163     }
   165     public Locale getFaultStringLocale() {
   166         if (this.faultStringElement == null)
   167             findFaultStringElement();
   168         if (this.faultStringElement != null) {
   169             String xmlLangAttr =
   170                 this.faultStringElement.getAttributeValue(
   171                     NameImpl.createFromUnqualifiedName("xml:lang"));
   172             if (xmlLangAttr != null)
   173                 return xmlLangToLocale(xmlLangAttr);
   174         }
   175         return null;
   176     }
   178     public void setFaultString(String faultString, Locale locale)
   179         throws SOAPException {
   180         setFaultString(faultString);
   181         this.faultStringElement.addAttribute(
   182             NameImpl.createFromTagName("xml:lang"),
   183             localeToXmlLang(locale));
   184     }
   186     protected boolean isStandardFaultElement(String localName) {
   187         if (localName.equalsIgnoreCase("detail") ||
   188             localName.equalsIgnoreCase("faultcode") ||
   189             localName.equalsIgnoreCase("faultstring") ||
   190             localName.equalsIgnoreCase("faultactor")) {
   191             return true;
   192         }
   193         return false;
   194     }
   196     public void appendFaultSubcode(QName subcode) {
   197         log.log(
   198             Level.SEVERE,
   199             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   200             "appendFaultSubcode");
   201         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   202     }
   204     public void removeAllFaultSubcodes() {
   205         log.log(
   206             Level.SEVERE,
   207             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   208             "removeAllFaultSubcodes");
   209         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   210     }
   212     public Iterator getFaultSubcodes() {
   213         log.log(
   214             Level.SEVERE,
   215             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   216             "getFaultSubcodes");
   217         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   218     }
   220     public String getFaultReasonText(Locale locale) {
   221         log.log(
   222             Level.SEVERE,
   223             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   224             "getFaultReasonText");
   225         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   226     }
   228     public Iterator getFaultReasonTexts() {
   229         log.log(
   230             Level.SEVERE,
   231             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   232             "getFaultReasonTexts");
   233         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   234     }
   236     public Iterator getFaultReasonLocales() {
   237         log.log(
   238             Level.SEVERE,
   239             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   240             "getFaultReasonLocales");
   241         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   242     }
   244     public void addFaultReasonText(String text, java.util.Locale locale)
   245         throws SOAPException {
   246         log.log(
   247             Level.SEVERE,
   248             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   249             "addFaultReasonText");
   250         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   251     }
   253     public String getFaultRole() {
   254         log.log(
   255             Level.SEVERE,
   256             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   257             "getFaultRole");
   258         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   259     }
   261     public void setFaultRole(String uri) {
   262         log.log(
   263             Level.SEVERE,
   264             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   265             "setFaultRole");
   266         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   267     }
   269     public String getFaultNode() {
   270         log.log(
   271             Level.SEVERE,
   272             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   273             "getFaultNode");
   274         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   275     }
   277     public void setFaultNode(String uri) {
   278         log.log(
   279             Level.SEVERE,
   280             "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
   281             "setFaultNode");
   282         throw new UnsupportedOperationException("Not supported in SOAP 1.1");
   283     }
   285     protected QName getDefaultFaultCode() {
   286         return new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Server");
   287     }
   289     public SOAPElement addChildElement(SOAPElement element)
   290         throws SOAPException {
   291         String localName = element.getLocalName();
   292         if ("Detail".equalsIgnoreCase(localName)) {
   293             if (hasDetail()) {
   294                 log.severe("SAAJ0305.ver1_2.detail.exists.error");
   295                 throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
   296             }
   297         }
   298         return super.addChildElement(element);
   299     }
   301     protected FaultElementImpl createSOAPFaultElement(QName qname) {
   302          return new FaultElement1_1Impl(
   303                        ((SOAPDocument) getOwnerDocument()).getDocument(),
   304                        qname);
   305     }
   307     protected FaultElementImpl createSOAPFaultElement(Name qname) {
   308          return new FaultElement1_1Impl(
   309                        ((SOAPDocument) getOwnerDocument()).getDocument(),
   310                        (NameImpl)qname);
   311     }
   313     public void setFaultCode(String faultCode, String prefix, String uri)
   314         throws SOAPException {
   315         if (prefix == null || "".equals(prefix)) {
   316             if (uri != null && !"".equals(uri)) {
   317                 prefix = getNamespacePrefix(uri);
   318                 if (prefix == null || "".equals(prefix)) {
   319                     prefix = "ns0";
   320                 }
   321             }
   322         }
   324         if (this.faultCodeElement == null)
   325             findFaultCodeElement();
   327         if (this.faultCodeElement == null)
   328             this.faultCodeElement = addFaultCodeElement();
   329         else
   330             this.faultCodeElement.removeContents();
   332         if (uri == null || "".equals(uri)) {
   333             if (prefix != null && !"".equals("prefix")) {
   334                 uri = this.faultCodeElement.getNamespaceURI(prefix);
   335             }
   336         }
   338         if (uri == null || "".equals(uri)) {
   339             if (prefix != null && !"".equals(prefix)) {
   340                 //cannot allow an empty URI for a non-Empty prefix
   341                 log.log(Level.SEVERE, "SAAJ0307.impl.no.ns.URI", new Object[]{prefix + ":" + faultCode});
   342                 throw new SOAPExceptionImpl("Empty/Null NamespaceURI specified for faultCode \"" + prefix + ":" + faultCode + "\"");
   343             } else {
   344                 uri = "";
   345             }
   346         }
   348         checkIfStandardFaultCode(faultCode, uri);
   349         ((FaultElementImpl) this.faultCodeElement).ensureNamespaceIsDeclared(prefix, uri);
   351         if (prefix == null || "".equals(prefix)) {
   352             finallySetFaultCode(faultCode);
   353         } else {
   354             finallySetFaultCode(prefix + ":" + faultCode);
   355         }
   356     }
   358     private boolean standardFaultCode(String faultCode) {
   359         if (faultCode.equals("VersionMismatch") || faultCode.equals("MustUnderstand")
   360             || faultCode.equals("Client") || faultCode.equals("Server")) {
   361             return true;
   362         }
   363         if (faultCode.startsWith("VersionMismatch.") || faultCode.startsWith("MustUnderstand.")
   364             || faultCode.startsWith("Client.") || faultCode.startsWith("Server.")) {
   365             return true;
   366         }
   367         return false;
   368     }
   370      public void setFaultActor(String faultActor) throws SOAPException {
   371         if (this.faultActorElement == null)
   372             findFaultActorElement();
   373         if (this.faultActorElement != null)
   374             this.faultActorElement.detachNode();
   375         if (faultActor == null)
   376             return;
   377         this.faultActorElement =
   378             createSOAPFaultElement(getFaultActorName());
   379         this.faultActorElement.addTextNode(faultActor);
   380         if (hasDetail()) {
   381             insertBefore(this.faultActorElement, this.detail);
   382             return;
   383         }
   384         addNode(this.faultActorElement);
   386     }
   387 }

mercurial