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

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation. Oracle designates this
aoqi@0 8 * particular file as subject to the "Classpath" exception as provided
aoqi@0 9 * by Oracle in the LICENSE file that accompanied this code.
aoqi@0 10 *
aoqi@0 11 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 14 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 15 * accompanied this code).
aoqi@0 16 *
aoqi@0 17 * You should have received a copy of the GNU General Public License version
aoqi@0 18 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 20 *
aoqi@0 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 22 * or visit www.oracle.com if you need additional information or have any
aoqi@0 23 * questions.
aoqi@0 24 */
aoqi@0 25
aoqi@0 26 /**
aoqi@0 27 *
aoqi@0 28 * @author SAAJ RI Development Team
aoqi@0 29 */
aoqi@0 30 package com.sun.xml.internal.messaging.saaj.soap.ver1_1;
aoqi@0 31
aoqi@0 32 import java.util.Iterator;
aoqi@0 33 import java.util.Locale;
aoqi@0 34 import java.util.logging.Logger;
aoqi@0 35 import java.util.logging.Level;
aoqi@0 36
aoqi@0 37 import javax.xml.namespace.QName;
aoqi@0 38 import javax.xml.soap.SOAPElement;
aoqi@0 39 import javax.xml.soap.SOAPFaultElement;
aoqi@0 40 import javax.xml.soap.SOAPException;
aoqi@0 41 import javax.xml.soap.SOAPConstants;
aoqi@0 42 import javax.xml.soap.Name;
aoqi@0 43 import javax.xml.soap.Name;
aoqi@0 44
aoqi@0 45 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
aoqi@0 46 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
aoqi@0 47 import com.sun.xml.internal.messaging.saaj.soap.impl.*;
aoqi@0 48 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
aoqi@0 49 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
aoqi@0 50 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
aoqi@0 51
aoqi@0 52
aoqi@0 53 public class Fault1_1Impl extends FaultImpl {
aoqi@0 54
aoqi@0 55 protected static final Logger log =
aoqi@0 56 Logger.getLogger(
aoqi@0 57 LogDomainConstants.SOAP_VER1_1_DOMAIN,
aoqi@0 58 "com.sun.xml.internal.messaging.saaj.soap.ver1_1.LocalStrings");
aoqi@0 59
aoqi@0 60 public Fault1_1Impl(SOAPDocumentImpl ownerDocument, String prefix) {
aoqi@0 61 super(ownerDocument, NameImpl.createFault1_1Name(prefix));
aoqi@0 62 }
aoqi@0 63
aoqi@0 64 protected NameImpl getDetailName() {
aoqi@0 65 return NameImpl.createDetail1_1Name();
aoqi@0 66 }
aoqi@0 67
aoqi@0 68 protected NameImpl getFaultCodeName() {
aoqi@0 69 return NameImpl.createFromUnqualifiedName("faultcode");
aoqi@0 70 }
aoqi@0 71
aoqi@0 72 protected NameImpl getFaultStringName() {
aoqi@0 73 return NameImpl.createFromUnqualifiedName("faultstring");
aoqi@0 74 }
aoqi@0 75
aoqi@0 76 protected NameImpl getFaultActorName() {
aoqi@0 77 return NameImpl.createFromUnqualifiedName("faultactor");
aoqi@0 78 }
aoqi@0 79
aoqi@0 80 protected DetailImpl createDetail() {
aoqi@0 81 return new Detail1_1Impl(
aoqi@0 82 ((SOAPDocument) getOwnerDocument()).getDocument());
aoqi@0 83 }
aoqi@0 84
aoqi@0 85 protected FaultElementImpl createSOAPFaultElement(String localName) {
aoqi@0 86 return new FaultElement1_1Impl(
aoqi@0 87 ((SOAPDocument) getOwnerDocument()).getDocument(),
aoqi@0 88 localName);
aoqi@0 89 }
aoqi@0 90
aoqi@0 91 protected void checkIfStandardFaultCode(String faultCode, String uri)
aoqi@0 92 throws SOAPException {
aoqi@0 93 // SOAP 1.1 doesn't seem to mandate using faultcode from a particular
aoqi@0 94 // set of values.
aoqi@0 95 // Also need to be backward compatible.
aoqi@0 96 }
aoqi@0 97
aoqi@0 98 protected void finallySetFaultCode(String faultcode) throws SOAPException {
aoqi@0 99 this.faultCodeElement.addTextNode(faultcode);
aoqi@0 100 }
aoqi@0 101
aoqi@0 102 public String getFaultCode() {
aoqi@0 103 if (this.faultCodeElement == null)
aoqi@0 104 findFaultCodeElement();
aoqi@0 105 return this.faultCodeElement.getValue();
aoqi@0 106 }
aoqi@0 107
aoqi@0 108 public Name getFaultCodeAsName() {
aoqi@0 109
aoqi@0 110 String faultcodeString = getFaultCode();
aoqi@0 111 if (faultcodeString == null) {
aoqi@0 112 return null;
aoqi@0 113 }
aoqi@0 114 int prefixIndex = faultcodeString.indexOf(':');
aoqi@0 115 if (prefixIndex == -1) {
aoqi@0 116 // Not a valid SOAP message, but we return the unqualified name
aoqi@0 117 // anyway since some apps do not strictly conform to SOAP
aoqi@0 118 // specs. A message that does not contain a <faultcode>
aoqi@0 119 // element itself is also not valid in which case we return
aoqi@0 120 // null instead of throwing an exception so this is consistent.
aoqi@0 121 return NameImpl.createFromUnqualifiedName(faultcodeString);
aoqi@0 122 }
aoqi@0 123
aoqi@0 124 // Get the prefix and map it to a namespace name (AKA namespace URI)
aoqi@0 125 String prefix = faultcodeString.substring(0, prefixIndex);
aoqi@0 126 if (this.faultCodeElement == null)
aoqi@0 127 findFaultCodeElement();
aoqi@0 128 String nsName = this.faultCodeElement.getNamespaceURI(prefix);
aoqi@0 129 return NameImpl.createFromQualifiedName(faultcodeString, nsName);
aoqi@0 130 }
aoqi@0 131
aoqi@0 132 public QName getFaultCodeAsQName() {
aoqi@0 133 String faultcodeString = getFaultCode();
aoqi@0 134 if (faultcodeString == null) {
aoqi@0 135 return null;
aoqi@0 136 }
aoqi@0 137 if (this.faultCodeElement == null)
aoqi@0 138 findFaultCodeElement();
aoqi@0 139 return convertCodeToQName(faultcodeString, this.faultCodeElement);
aoqi@0 140 }
aoqi@0 141
aoqi@0 142 public void setFaultString(String faultString) throws SOAPException {
aoqi@0 143
aoqi@0 144 if (this.faultStringElement == null)
aoqi@0 145 findFaultStringElement();
aoqi@0 146
aoqi@0 147 if (this.faultStringElement == null)
aoqi@0 148 this.faultStringElement = addSOAPFaultElement("faultstring");
aoqi@0 149 else {
aoqi@0 150 this.faultStringElement.removeContents();
aoqi@0 151 //this.faultStringElement.removeAttributeNS("http://www.w3.org/XML/1998/namespace", "lang");
aoqi@0 152 this.faultStringElement.removeAttribute("xml:lang");
aoqi@0 153 }
aoqi@0 154
aoqi@0 155 this.faultStringElement.addTextNode(faultString);
aoqi@0 156 }
aoqi@0 157
aoqi@0 158 public String getFaultString() {
aoqi@0 159 if (this.faultStringElement == null)
aoqi@0 160 findFaultStringElement();
aoqi@0 161 return this.faultStringElement.getValue();
aoqi@0 162
aoqi@0 163 }
aoqi@0 164
aoqi@0 165 public Locale getFaultStringLocale() {
aoqi@0 166 if (this.faultStringElement == null)
aoqi@0 167 findFaultStringElement();
aoqi@0 168 if (this.faultStringElement != null) {
aoqi@0 169 String xmlLangAttr =
aoqi@0 170 this.faultStringElement.getAttributeValue(
aoqi@0 171 NameImpl.createFromUnqualifiedName("xml:lang"));
aoqi@0 172 if (xmlLangAttr != null)
aoqi@0 173 return xmlLangToLocale(xmlLangAttr);
aoqi@0 174 }
aoqi@0 175 return null;
aoqi@0 176 }
aoqi@0 177
aoqi@0 178 public void setFaultString(String faultString, Locale locale)
aoqi@0 179 throws SOAPException {
aoqi@0 180 setFaultString(faultString);
aoqi@0 181 this.faultStringElement.addAttribute(
aoqi@0 182 NameImpl.createFromTagName("xml:lang"),
aoqi@0 183 localeToXmlLang(locale));
aoqi@0 184 }
aoqi@0 185
aoqi@0 186 protected boolean isStandardFaultElement(String localName) {
aoqi@0 187 if (localName.equalsIgnoreCase("detail") ||
aoqi@0 188 localName.equalsIgnoreCase("faultcode") ||
aoqi@0 189 localName.equalsIgnoreCase("faultstring") ||
aoqi@0 190 localName.equalsIgnoreCase("faultactor")) {
aoqi@0 191 return true;
aoqi@0 192 }
aoqi@0 193 return false;
aoqi@0 194 }
aoqi@0 195
aoqi@0 196 public void appendFaultSubcode(QName subcode) {
aoqi@0 197 log.log(
aoqi@0 198 Level.SEVERE,
aoqi@0 199 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 200 "appendFaultSubcode");
aoqi@0 201 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 202 }
aoqi@0 203
aoqi@0 204 public void removeAllFaultSubcodes() {
aoqi@0 205 log.log(
aoqi@0 206 Level.SEVERE,
aoqi@0 207 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 208 "removeAllFaultSubcodes");
aoqi@0 209 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 210 }
aoqi@0 211
aoqi@0 212 public Iterator getFaultSubcodes() {
aoqi@0 213 log.log(
aoqi@0 214 Level.SEVERE,
aoqi@0 215 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 216 "getFaultSubcodes");
aoqi@0 217 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 218 }
aoqi@0 219
aoqi@0 220 public String getFaultReasonText(Locale locale) {
aoqi@0 221 log.log(
aoqi@0 222 Level.SEVERE,
aoqi@0 223 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 224 "getFaultReasonText");
aoqi@0 225 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 226 }
aoqi@0 227
aoqi@0 228 public Iterator getFaultReasonTexts() {
aoqi@0 229 log.log(
aoqi@0 230 Level.SEVERE,
aoqi@0 231 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 232 "getFaultReasonTexts");
aoqi@0 233 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 234 }
aoqi@0 235
aoqi@0 236 public Iterator getFaultReasonLocales() {
aoqi@0 237 log.log(
aoqi@0 238 Level.SEVERE,
aoqi@0 239 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 240 "getFaultReasonLocales");
aoqi@0 241 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 242 }
aoqi@0 243
aoqi@0 244 public void addFaultReasonText(String text, java.util.Locale locale)
aoqi@0 245 throws SOAPException {
aoqi@0 246 log.log(
aoqi@0 247 Level.SEVERE,
aoqi@0 248 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 249 "addFaultReasonText");
aoqi@0 250 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 251 }
aoqi@0 252
aoqi@0 253 public String getFaultRole() {
aoqi@0 254 log.log(
aoqi@0 255 Level.SEVERE,
aoqi@0 256 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 257 "getFaultRole");
aoqi@0 258 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 259 }
aoqi@0 260
aoqi@0 261 public void setFaultRole(String uri) {
aoqi@0 262 log.log(
aoqi@0 263 Level.SEVERE,
aoqi@0 264 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 265 "setFaultRole");
aoqi@0 266 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 267 }
aoqi@0 268
aoqi@0 269 public String getFaultNode() {
aoqi@0 270 log.log(
aoqi@0 271 Level.SEVERE,
aoqi@0 272 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 273 "getFaultNode");
aoqi@0 274 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 275 }
aoqi@0 276
aoqi@0 277 public void setFaultNode(String uri) {
aoqi@0 278 log.log(
aoqi@0 279 Level.SEVERE,
aoqi@0 280 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
aoqi@0 281 "setFaultNode");
aoqi@0 282 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
aoqi@0 283 }
aoqi@0 284
aoqi@0 285 protected QName getDefaultFaultCode() {
aoqi@0 286 return new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Server");
aoqi@0 287 }
aoqi@0 288
aoqi@0 289 public SOAPElement addChildElement(SOAPElement element)
aoqi@0 290 throws SOAPException {
aoqi@0 291 String localName = element.getLocalName();
aoqi@0 292 if ("Detail".equalsIgnoreCase(localName)) {
aoqi@0 293 if (hasDetail()) {
aoqi@0 294 log.severe("SAAJ0305.ver1_2.detail.exists.error");
aoqi@0 295 throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
aoqi@0 296 }
aoqi@0 297 }
aoqi@0 298 return super.addChildElement(element);
aoqi@0 299 }
aoqi@0 300
aoqi@0 301 protected FaultElementImpl createSOAPFaultElement(QName qname) {
aoqi@0 302 return new FaultElement1_1Impl(
aoqi@0 303 ((SOAPDocument) getOwnerDocument()).getDocument(),
aoqi@0 304 qname);
aoqi@0 305 }
aoqi@0 306
aoqi@0 307 protected FaultElementImpl createSOAPFaultElement(Name qname) {
aoqi@0 308 return new FaultElement1_1Impl(
aoqi@0 309 ((SOAPDocument) getOwnerDocument()).getDocument(),
aoqi@0 310 (NameImpl)qname);
aoqi@0 311 }
aoqi@0 312
aoqi@0 313 public void setFaultCode(String faultCode, String prefix, String uri)
aoqi@0 314 throws SOAPException {
aoqi@0 315 if (prefix == null || "".equals(prefix)) {
aoqi@0 316 if (uri != null && !"".equals(uri)) {
aoqi@0 317 prefix = getNamespacePrefix(uri);
aoqi@0 318 if (prefix == null || "".equals(prefix)) {
aoqi@0 319 prefix = "ns0";
aoqi@0 320 }
aoqi@0 321 }
aoqi@0 322 }
aoqi@0 323
aoqi@0 324 if (this.faultCodeElement == null)
aoqi@0 325 findFaultCodeElement();
aoqi@0 326
aoqi@0 327 if (this.faultCodeElement == null)
aoqi@0 328 this.faultCodeElement = addFaultCodeElement();
aoqi@0 329 else
aoqi@0 330 this.faultCodeElement.removeContents();
aoqi@0 331
aoqi@0 332 if (uri == null || "".equals(uri)) {
aoqi@0 333 if (prefix != null && !"".equals("prefix")) {
aoqi@0 334 uri = this.faultCodeElement.getNamespaceURI(prefix);
aoqi@0 335 }
aoqi@0 336 }
aoqi@0 337
aoqi@0 338 if (uri == null || "".equals(uri)) {
aoqi@0 339 if (prefix != null && !"".equals(prefix)) {
aoqi@0 340 //cannot allow an empty URI for a non-Empty prefix
aoqi@0 341 log.log(Level.SEVERE, "SAAJ0307.impl.no.ns.URI", new Object[]{prefix + ":" + faultCode});
aoqi@0 342 throw new SOAPExceptionImpl("Empty/Null NamespaceURI specified for faultCode \"" + prefix + ":" + faultCode + "\"");
aoqi@0 343 } else {
aoqi@0 344 uri = "";
aoqi@0 345 }
aoqi@0 346 }
aoqi@0 347
aoqi@0 348 checkIfStandardFaultCode(faultCode, uri);
aoqi@0 349 ((FaultElementImpl) this.faultCodeElement).ensureNamespaceIsDeclared(prefix, uri);
aoqi@0 350
aoqi@0 351 if (prefix == null || "".equals(prefix)) {
aoqi@0 352 finallySetFaultCode(faultCode);
aoqi@0 353 } else {
aoqi@0 354 finallySetFaultCode(prefix + ":" + faultCode);
aoqi@0 355 }
aoqi@0 356 }
aoqi@0 357
aoqi@0 358 private boolean standardFaultCode(String faultCode) {
aoqi@0 359 if (faultCode.equals("VersionMismatch") || faultCode.equals("MustUnderstand")
aoqi@0 360 || faultCode.equals("Client") || faultCode.equals("Server")) {
aoqi@0 361 return true;
aoqi@0 362 }
aoqi@0 363 if (faultCode.startsWith("VersionMismatch.") || faultCode.startsWith("MustUnderstand.")
aoqi@0 364 || faultCode.startsWith("Client.") || faultCode.startsWith("Server.")) {
aoqi@0 365 return true;
aoqi@0 366 }
aoqi@0 367 return false;
aoqi@0 368 }
aoqi@0 369
aoqi@0 370 public void setFaultActor(String faultActor) throws SOAPException {
aoqi@0 371 if (this.faultActorElement == null)
aoqi@0 372 findFaultActorElement();
aoqi@0 373 if (this.faultActorElement != null)
aoqi@0 374 this.faultActorElement.detachNode();
aoqi@0 375 if (faultActor == null)
aoqi@0 376 return;
aoqi@0 377 this.faultActorElement =
aoqi@0 378 createSOAPFaultElement(getFaultActorName());
aoqi@0 379 this.faultActorElement.addTextNode(faultActor);
aoqi@0 380 if (hasDetail()) {
aoqi@0 381 insertBefore(this.faultActorElement, this.detail);
aoqi@0 382 return;
aoqi@0 383 }
aoqi@0 384 addNode(this.faultActorElement);
aoqi@0 385
aoqi@0 386 }
aoqi@0 387 }

mercurial