src/share/classes/com/sun/xml/internal/messaging/saaj/soap/ver1_2/Fault1_2Impl.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

duke@1 1 /*
tbell@45 2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation. Sun designates this
duke@1 8 * particular file as subject to the "Classpath" exception as provided
duke@1 9 * by Sun in the LICENSE file that accompanied this code.
duke@1 10 *
duke@1 11 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 14 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 15 * accompanied this code).
duke@1 16 *
duke@1 17 * You should have received a copy of the GNU General Public License version
duke@1 18 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 20 *
duke@1 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@1 22 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@1 23 * have any questions.
duke@1 24 */
tbell@45 25 /*
tbell@50 26 *
tbell@45 27 */
tbell@45 28
tbell@45 29
duke@1 30
duke@1 31 /**
duke@1 32 *
duke@1 33 * @author SAAJ RI Development Team
duke@1 34 */
duke@1 35 package com.sun.xml.internal.messaging.saaj.soap.ver1_2;
duke@1 36
duke@1 37 import java.util.*;
duke@1 38 import java.util.logging.Logger;
duke@1 39 import java.util.logging.Level;
duke@1 40
duke@1 41 import javax.xml.namespace.QName;
duke@1 42 import javax.xml.soap.*;
duke@1 43
duke@1 44 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
duke@1 45 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
duke@1 46 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
duke@1 47 import com.sun.xml.internal.messaging.saaj.soap.impl.*;
duke@1 48 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
duke@1 49 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
duke@1 50
duke@1 51
duke@1 52 public class Fault1_2Impl extends FaultImpl {
duke@1 53
tbell@50 54 protected static final Logger log =
duke@1 55 Logger.getLogger(
duke@1 56 LogDomainConstants.SOAP_VER1_2_DOMAIN,
duke@1 57 "com.sun.xml.internal.messaging.saaj.soap.ver1_2.LocalStrings");
duke@1 58
duke@1 59 private static final QName textName =
duke@1 60 new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Text");
duke@1 61 private final QName valueName =
duke@1 62 new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Value", getPrefix());
duke@1 63 private final QName subcodeName =
duke@1 64 new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Subcode", getPrefix());
duke@1 65
duke@1 66 private SOAPElement innermostSubCodeElement = null;
duke@1 67
duke@1 68 public Fault1_2Impl(SOAPDocumentImpl ownerDoc, String name, String prefix) {
duke@1 69 super(ownerDoc, NameImpl.createFault1_2Name(name, prefix));
duke@1 70 }
duke@1 71
duke@1 72 public Fault1_2Impl(SOAPDocumentImpl ownerDocument, String prefix) {
duke@1 73 super(ownerDocument, NameImpl.createFault1_2Name(null, prefix));
duke@1 74 }
duke@1 75
duke@1 76 protected NameImpl getDetailName() {
duke@1 77 return NameImpl.createSOAP12Name("Detail", getPrefix());
duke@1 78 }
duke@1 79
duke@1 80 protected NameImpl getFaultCodeName() {
duke@1 81 return NameImpl.createSOAP12Name("Code", getPrefix());
duke@1 82 }
duke@1 83
duke@1 84 protected NameImpl getFaultStringName() {
duke@1 85 return getFaultReasonName();
duke@1 86 }
duke@1 87
duke@1 88 protected NameImpl getFaultActorName() {
duke@1 89 return getFaultRoleName();
duke@1 90 }
duke@1 91
duke@1 92 private NameImpl getFaultRoleName() {
duke@1 93 return NameImpl.createSOAP12Name("Role", getPrefix());
duke@1 94 }
duke@1 95
duke@1 96 private NameImpl getFaultReasonName() {
duke@1 97 return NameImpl.createSOAP12Name("Reason", getPrefix());
duke@1 98 }
duke@1 99
duke@1 100 private NameImpl getFaultReasonTextName() {
duke@1 101 return NameImpl.createSOAP12Name("Text", getPrefix());
duke@1 102 }
duke@1 103
duke@1 104 private NameImpl getFaultNodeName() {
duke@1 105 return NameImpl.createSOAP12Name("Node", getPrefix());
duke@1 106 }
duke@1 107
duke@1 108 private static NameImpl getXmlLangName() {
duke@1 109 return NameImpl.createXmlName("lang");
duke@1 110 }
duke@1 111
duke@1 112 protected DetailImpl createDetail() {
duke@1 113 return new Detail1_2Impl(
duke@1 114 ((SOAPDocument) getOwnerDocument()).getDocument());
duke@1 115 }
duke@1 116
duke@1 117 protected FaultElementImpl createSOAPFaultElement(String localName) {
duke@1 118 return new FaultElement1_2Impl(
duke@1 119 ((SOAPDocument) getOwnerDocument()).getDocument(),
duke@1 120 localName);
duke@1 121 }
duke@1 122
duke@1 123 protected void checkIfStandardFaultCode(String faultCode, String uri)
duke@1 124 throws SOAPException {
duke@1 125 QName qname = new QName(uri, faultCode);
duke@1 126 if (SOAPConstants.SOAP_DATAENCODINGUNKNOWN_FAULT.equals(qname) ||
duke@1 127 SOAPConstants.SOAP_MUSTUNDERSTAND_FAULT.equals(qname) ||
duke@1 128 SOAPConstants.SOAP_RECEIVER_FAULT.equals(qname) ||
duke@1 129 SOAPConstants.SOAP_SENDER_FAULT.equals(qname) ||
duke@1 130 SOAPConstants.SOAP_VERSIONMISMATCH_FAULT.equals(qname))
duke@1 131 return;
duke@1 132 log.log(
duke@1 133 Level.SEVERE,
duke@1 134 "SAAJ0435.ver1_2.code.not.standard",
duke@1 135 qname);
duke@1 136 throw new SOAPExceptionImpl(qname + " is not a standard Code value");
duke@1 137 }
duke@1 138
duke@1 139 protected void finallySetFaultCode(String faultcode) throws SOAPException {
duke@1 140 SOAPElement value = this.faultCodeElement.addChildElement(valueName);
duke@1 141 value.addTextNode(faultcode);
duke@1 142 }
duke@1 143
duke@1 144 private void findReasonElement() {
duke@1 145 findFaultStringElement();
duke@1 146 }
duke@1 147
duke@1 148 public Iterator getFaultReasonTexts() throws SOAPException {
duke@1 149 // Fault Reason has similar semantics as faultstring
duke@1 150 if (this.faultStringElement == null)
duke@1 151 findReasonElement();
duke@1 152 Iterator eachTextElement =
duke@1 153 this.faultStringElement.getChildElements(textName);
duke@1 154 List texts = new ArrayList();
duke@1 155 while (eachTextElement.hasNext()) {
duke@1 156 SOAPElement textElement = (SOAPElement) eachTextElement.next();
duke@1 157 Locale thisLocale = getLocale(textElement);
duke@1 158 if (thisLocale == null) {
duke@1 159 log.severe("SAAJ0431.ver1_2.xml.lang.missing");
duke@1 160 throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
duke@1 161 }
duke@1 162 texts.add(textElement.getValue());
duke@1 163 }
duke@1 164 if (texts.isEmpty()) {
duke@1 165 log.severe("SAAJ0434.ver1_2.text.element.not.present");
duke@1 166 throw new SOAPExceptionImpl("env:Text must be present inside env:Reason");
duke@1 167 }
duke@1 168 return texts.iterator();
duke@1 169 }
duke@1 170
duke@1 171 public void addFaultReasonText(String text, java.util.Locale locale)
duke@1 172 throws SOAPException {
duke@1 173
duke@1 174 if (locale == null) {
duke@1 175 log.severe("SAAJ0430.ver1_2.locale.required");
duke@1 176 throw new SOAPException("locale is required and must not be null");
duke@1 177 }
duke@1 178
duke@1 179 // Fault Reason has similar semantics as faultstring
duke@1 180 if (this.faultStringElement == null)
duke@1 181 findReasonElement();
duke@1 182 SOAPElement reasonText;
duke@1 183
duke@1 184 if (this.faultStringElement == null) {
duke@1 185 this.faultStringElement = addSOAPFaultElement("Reason");
duke@1 186 reasonText =
duke@1 187 this.faultStringElement.addChildElement(
duke@1 188 getFaultReasonTextName());
duke@1 189 } else {
duke@1 190 removeDefaultFaultString();
duke@1 191 reasonText = getFaultReasonTextElement(locale);
duke@1 192 if (reasonText != null) {
duke@1 193 reasonText.removeContents();
duke@1 194 } else {
duke@1 195 reasonText =
duke@1 196 this.faultStringElement.addChildElement(
duke@1 197 getFaultReasonTextName());
duke@1 198 }
duke@1 199 }
duke@1 200
duke@1 201 String xmlLang = localeToXmlLang(locale);
duke@1 202 reasonText.addAttribute(getXmlLangName(), xmlLang);
duke@1 203 reasonText.addTextNode(text);
duke@1 204 }
duke@1 205
duke@1 206 private void removeDefaultFaultString() throws SOAPException {
duke@1 207 SOAPElement reasonText = getFaultReasonTextElement(Locale.getDefault());
duke@1 208 if (reasonText != null) {
duke@1 209 String defaultFaultString =
duke@1 210 "Fault string, and possibly fault code, not set";
duke@1 211 if (defaultFaultString.equals(reasonText.getValue())) {
duke@1 212 reasonText.detachNode();
duke@1 213 }
duke@1 214 }
duke@1 215 }
duke@1 216
duke@1 217 public String getFaultReasonText(Locale locale) throws SOAPException {
duke@1 218
duke@1 219 if (locale == null)
duke@1 220 return null;
duke@1 221
duke@1 222 // Fault Reason has similar semantics as faultstring
duke@1 223 if (this.faultStringElement == null)
duke@1 224 findReasonElement();
duke@1 225
duke@1 226 if (this.faultStringElement != null) {
duke@1 227 SOAPElement textElement = getFaultReasonTextElement(locale);
duke@1 228 if (textElement != null) {
duke@1 229 textElement.normalize();
duke@1 230 return textElement.getFirstChild().getNodeValue();
duke@1 231 }
duke@1 232 }
duke@1 233
duke@1 234 return null;
duke@1 235 }
duke@1 236
duke@1 237 public Iterator getFaultReasonLocales() throws SOAPException {
duke@1 238 // Fault Reason has similar semantics as faultstring
duke@1 239 if (this.faultStringElement == null)
duke@1 240 findReasonElement();
duke@1 241 Iterator eachTextElement =
duke@1 242 this.faultStringElement.getChildElements(textName);
duke@1 243 List localeSet = new ArrayList();
duke@1 244 while (eachTextElement.hasNext()) {
duke@1 245 SOAPElement textElement = (SOAPElement) eachTextElement.next();
duke@1 246 Locale thisLocale = getLocale(textElement);
duke@1 247 if (thisLocale == null) {
duke@1 248 log.severe("SAAJ0431.ver1_2.xml.lang.missing");
duke@1 249 throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
duke@1 250 }
duke@1 251 localeSet.add(thisLocale);
duke@1 252 }
duke@1 253 if (localeSet.isEmpty()) {
duke@1 254 log.severe("SAAJ0434.ver1_2.text.element.not.present");
duke@1 255 throw new SOAPExceptionImpl("env:Text elements with mandatory xml:lang attributes must be present inside env:Reason");
duke@1 256 }
duke@1 257 return localeSet.iterator();
duke@1 258 }
duke@1 259
duke@1 260 public Locale getFaultStringLocale() {
duke@1 261 Locale locale = null;
duke@1 262 try {
duke@1 263 locale = (Locale) getFaultReasonLocales().next();
duke@1 264 } catch (SOAPException e) {}
duke@1 265 return locale;
duke@1 266 }
duke@1 267
duke@1 268 /*
duke@1 269 * This method assumes that locale and faultStringElement are non-null
duke@1 270 */
duke@1 271 private SOAPElement getFaultReasonTextElement(Locale locale)
duke@1 272 throws SOAPException {
duke@1 273
duke@1 274 // Fault Reason has similar semantics as faultstring
duke@1 275 Iterator eachTextElement =
duke@1 276 this.faultStringElement.getChildElements(textName);
duke@1 277 while (eachTextElement.hasNext()) {
duke@1 278 SOAPElement textElement = (SOAPElement) eachTextElement.next();
duke@1 279 Locale thisLocale = getLocale(textElement);
duke@1 280 if (thisLocale == null) {
duke@1 281 log.severe("SAAJ0431.ver1_2.xml.lang.missing");
duke@1 282 throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
duke@1 283 }
duke@1 284 if (thisLocale.equals(locale)) {
duke@1 285 return textElement;
duke@1 286 }
duke@1 287 }
duke@1 288 return null;
duke@1 289 }
duke@1 290
duke@1 291 public String getFaultNode() {
duke@1 292 SOAPElement faultNode = findChild(getFaultNodeName());
duke@1 293 if (faultNode == null) {
duke@1 294 return null;
duke@1 295 }
duke@1 296 return faultNode.getValue();
duke@1 297 }
duke@1 298
duke@1 299 public void setFaultNode(String uri) throws SOAPException {
duke@1 300 SOAPElement faultNode = findChild(getFaultNodeName());
duke@1 301 if (faultNode != null) {
duke@1 302 faultNode.detachNode();
duke@1 303 }
tbell@45 304 faultNode = createSOAPFaultElement(getFaultNodeName());
duke@1 305 faultNode = faultNode.addTextNode(uri);
duke@1 306 if (getFaultRole() != null) {
duke@1 307 insertBefore(faultNode, this.faultActorElement);
duke@1 308 return;
duke@1 309 }
duke@1 310 if (hasDetail()) {
duke@1 311 insertBefore(faultNode, this.detail);
duke@1 312 return;
duke@1 313 }
duke@1 314 addNode(faultNode);
duke@1 315 }
duke@1 316
duke@1 317 public String getFaultRole() {
duke@1 318 return getFaultActor();
duke@1 319 }
duke@1 320
duke@1 321 public void setFaultRole(String uri) throws SOAPException {
duke@1 322 if (this.faultActorElement == null)
duke@1 323 findFaultActorElement();
duke@1 324 if (this.faultActorElement != null)
duke@1 325 this.faultActorElement.detachNode();
duke@1 326 this.faultActorElement =
tbell@45 327 createSOAPFaultElement(getFaultActorName());
duke@1 328 this.faultActorElement.addTextNode(uri);
duke@1 329 if (hasDetail()) {
duke@1 330 insertBefore(this.faultActorElement, this.detail);
duke@1 331 return;
duke@1 332 }
duke@1 333 addNode(this.faultActorElement);
duke@1 334 }
duke@1 335
duke@1 336 public String getFaultCode() {
duke@1 337 if (this.faultCodeElement == null)
duke@1 338 findFaultCodeElement();
duke@1 339 Iterator codeValues =
duke@1 340 this.faultCodeElement.getChildElements(valueName);
duke@1 341 return ((SOAPElement) codeValues.next()).getValue();
duke@1 342 }
duke@1 343
duke@1 344 public QName getFaultCodeAsQName() {
duke@1 345 String faultcode = getFaultCode();
duke@1 346 if (faultcode == null) {
duke@1 347 return null;
duke@1 348 }
duke@1 349 if (this.faultCodeElement == null)
duke@1 350 findFaultCodeElement();
duke@1 351 Iterator valueElements =
duke@1 352 this.faultCodeElement.getChildElements(valueName);
duke@1 353 return convertCodeToQName(
duke@1 354 faultcode,
duke@1 355 (SOAPElement) valueElements.next());
duke@1 356 }
duke@1 357
duke@1 358 public Name getFaultCodeAsName() {
duke@1 359 String faultcode = getFaultCode();
duke@1 360 if (faultcode == null) {
duke@1 361 return null;
duke@1 362 }
duke@1 363 if (this.faultCodeElement == null)
duke@1 364 findFaultCodeElement();
duke@1 365 Iterator valueElements =
duke@1 366 this.faultCodeElement.getChildElements(valueName);
duke@1 367 return NameImpl.convertToName(
duke@1 368 convertCodeToQName(
duke@1 369 faultcode,
duke@1 370 (SOAPElement) valueElements.next()));
duke@1 371 }
duke@1 372
duke@1 373 public String getFaultString() {
duke@1 374 String reason = null;
duke@1 375 try {
duke@1 376 //reason = getFaultReasonText(Locale.getDefault());
duke@1 377 //if (reason == null)
duke@1 378 reason = (String) getFaultReasonTexts().next();
duke@1 379 } catch (SOAPException e) {}
duke@1 380 return reason;
duke@1 381 }
duke@1 382
duke@1 383 public void setFaultString(String faultString) throws SOAPException {
duke@1 384 addFaultReasonText(faultString, Locale.getDefault());
duke@1 385 }
duke@1 386
duke@1 387 public void setFaultString(
duke@1 388 String faultString,
duke@1 389 Locale locale)
duke@1 390 throws SOAPException {
duke@1 391 addFaultReasonText(faultString, locale);
duke@1 392 }
duke@1 393
duke@1 394 public void appendFaultSubcode(QName subcode) throws SOAPException {
duke@1 395 if (subcode == null) {
duke@1 396 return;
duke@1 397 }
duke@1 398 if (subcode.getNamespaceURI() == null ||
duke@1 399 "".equals(subcode.getNamespaceURI())) {
duke@1 400
duke@1 401 log.severe("SAAJ0432.ver1_2.subcode.not.ns.qualified");
duke@1 402 throw new SOAPExceptionImpl("A Subcode must be namespace-qualified");
duke@1 403 }
duke@1 404 if (innermostSubCodeElement == null) {
duke@1 405 if (faultCodeElement == null)
duke@1 406 findFaultCodeElement();
duke@1 407 innermostSubCodeElement = faultCodeElement;
duke@1 408 }
duke@1 409 String prefix = null;
duke@1 410 if (subcode.getPrefix() == null || "".equals(subcode.getPrefix())) {
duke@1 411 prefix =
duke@1 412 ((ElementImpl) innermostSubCodeElement).getNamespacePrefix(
duke@1 413 subcode.getNamespaceURI());
duke@1 414 } else
duke@1 415 prefix = subcode.getPrefix();
duke@1 416 if (prefix == null || "".equals(prefix)) {
duke@1 417 prefix = "ns1";
duke@1 418 }
duke@1 419 innermostSubCodeElement =
duke@1 420 innermostSubCodeElement.addChildElement(subcodeName);
duke@1 421 SOAPElement subcodeValueElement =
duke@1 422 innermostSubCodeElement.addChildElement(valueName);
duke@1 423 ((ElementImpl) subcodeValueElement).ensureNamespaceIsDeclared(
duke@1 424 prefix,
duke@1 425 subcode.getNamespaceURI());
duke@1 426 subcodeValueElement.addTextNode(prefix + ":" + subcode.getLocalPart());
duke@1 427 }
duke@1 428
duke@1 429 public void removeAllFaultSubcodes() {
duke@1 430 if (this.faultCodeElement == null)
duke@1 431 findFaultCodeElement();
duke@1 432 Iterator subcodeElements =
duke@1 433 this.faultCodeElement.getChildElements(subcodeName);
duke@1 434 if (subcodeElements.hasNext()) {
duke@1 435 SOAPElement subcode = (SOAPElement) subcodeElements.next();
duke@1 436 subcode.detachNode();
duke@1 437 }
duke@1 438 }
duke@1 439
duke@1 440 public Iterator getFaultSubcodes() {
duke@1 441 if (this.faultCodeElement == null)
duke@1 442 findFaultCodeElement();
duke@1 443 final List subcodeList = new ArrayList();
duke@1 444 SOAPElement currentCodeElement = this.faultCodeElement;
duke@1 445 Iterator subcodeElements =
duke@1 446 currentCodeElement.getChildElements(subcodeName);
duke@1 447 while (subcodeElements.hasNext()) {
duke@1 448 currentCodeElement = (ElementImpl) subcodeElements.next();
duke@1 449 Iterator valueElements =
duke@1 450 currentCodeElement.getChildElements(valueName);
duke@1 451 SOAPElement valueElement = (SOAPElement) valueElements.next();
duke@1 452 String code = valueElement.getValue();
duke@1 453 subcodeList.add(convertCodeToQName(code, valueElement));
duke@1 454 subcodeElements = currentCodeElement.getChildElements(subcodeName);
duke@1 455 }
duke@1 456 //return subcodeList.iterator();
duke@1 457 return new Iterator() {
duke@1 458 Iterator subCodeIter = subcodeList.iterator();
duke@1 459
duke@1 460 public boolean hasNext() {
duke@1 461 return subCodeIter.hasNext();
duke@1 462 }
duke@1 463
duke@1 464 public Object next() {
duke@1 465 return subCodeIter.next();
duke@1 466 }
duke@1 467
duke@1 468 public void remove() {
duke@1 469 throw new UnsupportedOperationException(
duke@1 470 "Method remove() not supported on SubCodes Iterator");
duke@1 471 }
duke@1 472 };
duke@1 473 }
duke@1 474
duke@1 475 private static Locale getLocale(SOAPElement reasonText) {
duke@1 476 return xmlLangToLocale(reasonText.getAttributeValue(getXmlLangName()));
duke@1 477 }
duke@1 478
duke@1 479 /*
duke@1 480 * Override setEncodingStyle of ElementImpl to restrict adding encodingStyle
duke@1 481 * attribute to SOAP Fault (SOAP 1.2 spec, part 1, section 5.1.1)
duke@1 482 */
duke@1 483 public void setEncodingStyle(String encodingStyle) throws SOAPException {
duke@1 484 log.severe("SAAJ0407.ver1_2.no.encodingStyle.in.fault");
duke@1 485 throw new SOAPExceptionImpl("encodingStyle attribute cannot appear on Fault");
duke@1 486 }
duke@1 487
duke@1 488 public SOAPElement addAttribute(Name name, String value)
duke@1 489 throws SOAPException {
duke@1 490 if (name.getLocalName().equals("encodingStyle")
duke@1 491 && name.getURI().equals(NameImpl.SOAP12_NAMESPACE)) {
duke@1 492 setEncodingStyle(value);
duke@1 493 }
duke@1 494 return super.addAttribute(name, value);
duke@1 495 }
duke@1 496
duke@1 497 public SOAPElement addAttribute(QName name, String value)
duke@1 498 throws SOAPException {
duke@1 499 if (name.getLocalPart().equals("encodingStyle")
duke@1 500 && name.getNamespaceURI().equals(NameImpl.SOAP12_NAMESPACE)) {
duke@1 501 setEncodingStyle(value);
duke@1 502 }
duke@1 503 return super.addAttribute(name, value);
duke@1 504 }
duke@1 505
duke@1 506 public SOAPElement addTextNode(String text) throws SOAPException {
duke@1 507 log.log(
duke@1 508 Level.SEVERE,
duke@1 509 "SAAJ0416.ver1_2.adding.text.not.legal",
duke@1 510 getElementQName());
duke@1 511 throw new SOAPExceptionImpl("Adding text to SOAP 1.2 Fault is not legal");
duke@1 512 }
duke@1 513
duke@1 514 public SOAPElement addChildElement(SOAPElement element)
duke@1 515 throws SOAPException {
duke@1 516 String localName = element.getLocalName();
duke@1 517 if ("Detail".equalsIgnoreCase(localName)) {
duke@1 518 if (hasDetail()) {
duke@1 519 log.severe("SAAJ0436.ver1_2.detail.exists.error");
duke@1 520 throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
duke@1 521 }
duke@1 522 String uri = element.getElementQName().getNamespaceURI();
duke@1 523 if (!uri.equals(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE)) {
duke@1 524 log.severe("SAAJ0437.ver1_2.version.mismatch.error");
duke@1 525 throw new SOAPExceptionImpl("Cannot add Detail, Incorrect SOAP version specified for Detail element");
duke@1 526 }
duke@1 527 }
duke@1 528 if (element instanceof Detail1_2Impl) {
duke@1 529 ElementImpl importedElement = (ElementImpl) importElement(element);
duke@1 530 addNode(importedElement);
duke@1 531 return convertToSoapElement(importedElement);
duke@1 532 } else
duke@1 533 return super.addChildElement(element);
duke@1 534 }
duke@1 535
duke@1 536 protected boolean isStandardFaultElement(String localName) {
duke@1 537 if (localName.equalsIgnoreCase("code") ||
duke@1 538 localName.equalsIgnoreCase("reason") ||
duke@1 539 localName.equalsIgnoreCase("node") ||
duke@1 540 localName.equalsIgnoreCase("role") ||
duke@1 541 localName.equalsIgnoreCase("detail")) {
duke@1 542 return true;
duke@1 543 }
duke@1 544 return false;
duke@1 545 }
duke@1 546
duke@1 547 protected QName getDefaultFaultCode() {
duke@1 548 return SOAPConstants.SOAP_SENDER_FAULT;
duke@1 549 }
duke@1 550
tbell@45 551 protected FaultElementImpl createSOAPFaultElement(QName qname) {
tbell@45 552 return new FaultElement1_2Impl(
tbell@45 553 ((SOAPDocument) getOwnerDocument()).getDocument(),
tbell@45 554 qname);
tbell@45 555 }
tbell@45 556
tbell@45 557 protected FaultElementImpl createSOAPFaultElement(Name qname) {
tbell@45 558 return new FaultElement1_2Impl(
tbell@45 559 ((SOAPDocument) getOwnerDocument()).getDocument(),
tbell@45 560 (NameImpl)qname);
tbell@45 561 }
tbell@45 562
duke@1 563 }

mercurial