--- a/jaxws/src/java.xml.soap/share/classes/com/sun/xml/internal/messaging/saaj/soap/ver1_2/Fault1_2Impl.java Thu Jan 15 11:30:13 2015 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,562 +0,0 @@
-/*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
-*
-* @author SAAJ RI Development Team
-*/
-package com.sun.xml.internal.messaging.saaj.soap.ver1_2;
-
-import java.util.*;
-import java.util.logging.Logger;
-import java.util.logging.Level;
-
-import javax.xml.namespace.QName;
-import javax.xml.soap.*;
-
-import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
-import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
-import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
-import com.sun.xml.internal.messaging.saaj.soap.impl.*;
-import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
-import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
-
-
-public class Fault1_2Impl extends FaultImpl {
-
- protected static final Logger log =
- Logger.getLogger(
- LogDomainConstants.SOAP_VER1_2_DOMAIN,
- "com.sun.xml.internal.messaging.saaj.soap.ver1_2.LocalStrings");
-
- private static final QName textName =
- new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Text");
- private final QName valueName =
- new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Value", getPrefix());
- private final QName subcodeName =
- new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE, "Subcode", getPrefix());
-
- private SOAPElement innermostSubCodeElement = null;
-
- public Fault1_2Impl(SOAPDocumentImpl ownerDoc, String name, String prefix) {
- super(ownerDoc, NameImpl.createFault1_2Name(name, prefix));
- }
-
- public Fault1_2Impl(SOAPDocumentImpl ownerDocument, String prefix) {
- super(ownerDocument, NameImpl.createFault1_2Name(null, prefix));
- }
-
- protected NameImpl getDetailName() {
- return NameImpl.createSOAP12Name("Detail", getPrefix());
- }
-
- protected NameImpl getFaultCodeName() {
- return NameImpl.createSOAP12Name("Code", getPrefix());
- }
-
- protected NameImpl getFaultStringName() {
- return getFaultReasonName();
- }
-
- protected NameImpl getFaultActorName() {
- return getFaultRoleName();
- }
-
- private NameImpl getFaultRoleName() {
- return NameImpl.createSOAP12Name("Role", getPrefix());
- }
-
- private NameImpl getFaultReasonName() {
- return NameImpl.createSOAP12Name("Reason", getPrefix());
- }
-
- private NameImpl getFaultReasonTextName() {
- return NameImpl.createSOAP12Name("Text", getPrefix());
- }
-
- private NameImpl getFaultNodeName() {
- return NameImpl.createSOAP12Name("Node", getPrefix());
- }
-
- private static NameImpl getXmlLangName() {
- return NameImpl.createXmlName("lang");
- }
-
- protected DetailImpl createDetail() {
- return new Detail1_2Impl(
- ((SOAPDocument) getOwnerDocument()).getDocument());
- }
-
- protected FaultElementImpl createSOAPFaultElement(String localName) {
- return new FaultElement1_2Impl(
- ((SOAPDocument) getOwnerDocument()).getDocument(),
- localName);
- }
-
- protected void checkIfStandardFaultCode(String faultCode, String uri)
- throws SOAPException {
- QName qname = new QName(uri, faultCode);
- if (SOAPConstants.SOAP_DATAENCODINGUNKNOWN_FAULT.equals(qname) ||
- SOAPConstants.SOAP_MUSTUNDERSTAND_FAULT.equals(qname) ||
- SOAPConstants.SOAP_RECEIVER_FAULT.equals(qname) ||
- SOAPConstants.SOAP_SENDER_FAULT.equals(qname) ||
- SOAPConstants.SOAP_VERSIONMISMATCH_FAULT.equals(qname))
- return;
- log.log(
- Level.SEVERE,
- "SAAJ0435.ver1_2.code.not.standard",
- qname);
- throw new SOAPExceptionImpl(qname + " is not a standard Code value");
- }
-
- protected void finallySetFaultCode(String faultcode) throws SOAPException {
- SOAPElement value = this.faultCodeElement.addChildElement(valueName);
- value.addTextNode(faultcode);
- }
-
- private void findReasonElement() {
- findFaultStringElement();
- }
-
- public Iterator getFaultReasonTexts() throws SOAPException {
- // Fault Reason has similar semantics as faultstring
- if (this.faultStringElement == null)
- findReasonElement();
- Iterator eachTextElement =
- this.faultStringElement.getChildElements(textName);
- List texts = new ArrayList();
- while (eachTextElement.hasNext()) {
- SOAPElement textElement = (SOAPElement) eachTextElement.next();
- Locale thisLocale = getLocale(textElement);
- if (thisLocale == null) {
- log.severe("SAAJ0431.ver1_2.xml.lang.missing");
- throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
- }
- texts.add(textElement.getValue());
- }
- if (texts.isEmpty()) {
- log.severe("SAAJ0434.ver1_2.text.element.not.present");
- throw new SOAPExceptionImpl("env:Text must be present inside env:Reason");
- }
- return texts.iterator();
- }
-
- public void addFaultReasonText(String text, java.util.Locale locale)
- throws SOAPException {
-
- if (locale == null) {
- log.severe("SAAJ0430.ver1_2.locale.required");
- throw new SOAPException("locale is required and must not be null");
- }
-
- // Fault Reason has similar semantics as faultstring
- if (this.faultStringElement == null)
- findReasonElement();
- SOAPElement reasonText;
-
- if (this.faultStringElement == null) {
- this.faultStringElement = addSOAPFaultElement("Reason");
- reasonText =
- this.faultStringElement.addChildElement(
- getFaultReasonTextName());
- } else {
- removeDefaultFaultString();
- reasonText = getFaultReasonTextElement(locale);
- if (reasonText != null) {
- reasonText.removeContents();
- } else {
- reasonText =
- this.faultStringElement.addChildElement(
- getFaultReasonTextName());
- }
- }
-
- String xmlLang = localeToXmlLang(locale);
- reasonText.addAttribute(getXmlLangName(), xmlLang);
- reasonText.addTextNode(text);
- }
-
- private void removeDefaultFaultString() throws SOAPException {
- SOAPElement reasonText = getFaultReasonTextElement(Locale.getDefault());
- if (reasonText != null) {
- String defaultFaultString =
- "Fault string, and possibly fault code, not set";
- if (defaultFaultString.equals(reasonText.getValue())) {
- reasonText.detachNode();
- }
- }
- }
-
- public String getFaultReasonText(Locale locale) throws SOAPException {
-
- if (locale == null)
- return null;
-
- // Fault Reason has similar semantics as faultstring
- if (this.faultStringElement == null)
- findReasonElement();
-
- if (this.faultStringElement != null) {
- SOAPElement textElement = getFaultReasonTextElement(locale);
- if (textElement != null) {
- textElement.normalize();
- return textElement.getFirstChild().getNodeValue();
- }
- }
-
- return null;
- }
-
- public Iterator getFaultReasonLocales() throws SOAPException {
- // Fault Reason has similar semantics as faultstring
- if (this.faultStringElement == null)
- findReasonElement();
- Iterator eachTextElement =
- this.faultStringElement.getChildElements(textName);
- List localeSet = new ArrayList();
- while (eachTextElement.hasNext()) {
- SOAPElement textElement = (SOAPElement) eachTextElement.next();
- Locale thisLocale = getLocale(textElement);
- if (thisLocale == null) {
- log.severe("SAAJ0431.ver1_2.xml.lang.missing");
- throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
- }
- localeSet.add(thisLocale);
- }
- if (localeSet.isEmpty()) {
- log.severe("SAAJ0434.ver1_2.text.element.not.present");
- throw new SOAPExceptionImpl("env:Text elements with mandatory xml:lang attributes must be present inside env:Reason");
- }
- return localeSet.iterator();
- }
-
- public Locale getFaultStringLocale() {
- Locale locale = null;
- try {
- locale = (Locale) getFaultReasonLocales().next();
- } catch (SOAPException e) {}
- return locale;
- }
-
- /*
- * This method assumes that locale and faultStringElement are non-null
- */
- private SOAPElement getFaultReasonTextElement(Locale locale)
- throws SOAPException {
-
- // Fault Reason has similar semantics as faultstring
- Iterator eachTextElement =
- this.faultStringElement.getChildElements(textName);
- while (eachTextElement.hasNext()) {
- SOAPElement textElement = (SOAPElement) eachTextElement.next();
- Locale thisLocale = getLocale(textElement);
- if (thisLocale == null) {
- log.severe("SAAJ0431.ver1_2.xml.lang.missing");
- throw new SOAPExceptionImpl("\"xml:lang\" attribute is not present on the Text element");
- }
- if (thisLocale.equals(locale)) {
- return textElement;
- }
- }
- return null;
- }
-
- public String getFaultNode() {
- SOAPElement faultNode = findAndConvertChildElement(getFaultNodeName());
- if (faultNode == null) {
- return null;
- }
- return faultNode.getValue();
- }
-
- public void setFaultNode(String uri) throws SOAPException {
- SOAPElement faultNode = findAndConvertChildElement(getFaultNodeName());
- if (faultNode != null) {
- faultNode.detachNode();
- }
- faultNode = createSOAPFaultElement(getFaultNodeName());
- faultNode = faultNode.addTextNode(uri);
- if (getFaultRole() != null) {
- insertBefore(faultNode, this.faultActorElement);
- return;
- }
- if (hasDetail()) {
- insertBefore(faultNode, this.detail);
- return;
- }
- addNode(faultNode);
- }
-
- public String getFaultRole() {
- return getFaultActor();
- }
-
- public void setFaultRole(String uri) throws SOAPException {
- if (this.faultActorElement == null)
- findFaultActorElement();
- if (this.faultActorElement != null)
- this.faultActorElement.detachNode();
- this.faultActorElement =
- createSOAPFaultElement(getFaultActorName());
- this.faultActorElement.addTextNode(uri);
- if (hasDetail()) {
- insertBefore(this.faultActorElement, this.detail);
- return;
- }
- addNode(this.faultActorElement);
- }
-
- public String getFaultCode() {
- if (this.faultCodeElement == null)
- findFaultCodeElement();
- Iterator codeValues =
- this.faultCodeElement.getChildElements(valueName);
- return ((SOAPElement) codeValues.next()).getValue();
- }
-
- public QName getFaultCodeAsQName() {
- String faultcode = getFaultCode();
- if (faultcode == null) {
- return null;
- }
- if (this.faultCodeElement == null)
- findFaultCodeElement();
- Iterator valueElements =
- this.faultCodeElement.getChildElements(valueName);
- return convertCodeToQName(
- faultcode,
- (SOAPElement) valueElements.next());
- }
-
- public Name getFaultCodeAsName() {
- String faultcode = getFaultCode();
- if (faultcode == null) {
- return null;
- }
- if (this.faultCodeElement == null)
- findFaultCodeElement();
- Iterator valueElements =
- this.faultCodeElement.getChildElements(valueName);
- return NameImpl.convertToName(
- convertCodeToQName(
- faultcode,
- (SOAPElement) valueElements.next()));
- }
-
- public String getFaultString() {
- String reason = null;
- try {
- //reason = getFaultReasonText(Locale.getDefault());
- //if (reason == null)
- reason = (String) getFaultReasonTexts().next();
- } catch (SOAPException e) {}
- return reason;
- }
-
- public void setFaultString(String faultString) throws SOAPException {
- addFaultReasonText(faultString, Locale.getDefault());
- }
-
- public void setFaultString(
- String faultString,
- Locale locale)
- throws SOAPException {
- addFaultReasonText(faultString, locale);
- }
-
- public void appendFaultSubcode(QName subcode) throws SOAPException {
- if (subcode == null) {
- return;
- }
- if (subcode.getNamespaceURI() == null ||
- "".equals(subcode.getNamespaceURI())) {
-
- log.severe("SAAJ0432.ver1_2.subcode.not.ns.qualified");
- throw new SOAPExceptionImpl("A Subcode must be namespace-qualified");
- }
- if (innermostSubCodeElement == null) {
- if (faultCodeElement == null)
- findFaultCodeElement();
- innermostSubCodeElement = faultCodeElement;
- }
- String prefix = null;
- if (subcode.getPrefix() == null || "".equals(subcode.getPrefix())) {
- prefix =
- ((ElementImpl) innermostSubCodeElement).getNamespacePrefix(
- subcode.getNamespaceURI());
- } else
- prefix = subcode.getPrefix();
- if (prefix == null || "".equals(prefix)) {
- prefix = "ns1";
- }
- innermostSubCodeElement =
- innermostSubCodeElement.addChildElement(subcodeName);
- SOAPElement subcodeValueElement =
- innermostSubCodeElement.addChildElement(valueName);
- ((ElementImpl) subcodeValueElement).ensureNamespaceIsDeclared(
- prefix,
- subcode.getNamespaceURI());
- subcodeValueElement.addTextNode(prefix + ":" + subcode.getLocalPart());
- }
-
- public void removeAllFaultSubcodes() {
- if (this.faultCodeElement == null)
- findFaultCodeElement();
- Iterator subcodeElements =
- this.faultCodeElement.getChildElements(subcodeName);
- if (subcodeElements.hasNext()) {
- SOAPElement subcode = (SOAPElement) subcodeElements.next();
- subcode.detachNode();
- }
- }
-
- public Iterator getFaultSubcodes() {
- if (this.faultCodeElement == null)
- findFaultCodeElement();
- final List subcodeList = new ArrayList();
- SOAPElement currentCodeElement = this.faultCodeElement;
- Iterator subcodeElements =
- currentCodeElement.getChildElements(subcodeName);
- while (subcodeElements.hasNext()) {
- currentCodeElement = (ElementImpl) subcodeElements.next();
- Iterator valueElements =
- currentCodeElement.getChildElements(valueName);
- SOAPElement valueElement = (SOAPElement) valueElements.next();
- String code = valueElement.getValue();
- subcodeList.add(convertCodeToQName(code, valueElement));
- subcodeElements = currentCodeElement.getChildElements(subcodeName);
- }
- //return subcodeList.iterator();
- return new Iterator() {
- Iterator subCodeIter = subcodeList.iterator();
-
- public boolean hasNext() {
- return subCodeIter.hasNext();
- }
-
- public Object next() {
- return subCodeIter.next();
- }
-
- public void remove() {
- throw new UnsupportedOperationException(
- "Method remove() not supported on SubCodes Iterator");
- }
- };
- }
-
- private static Locale getLocale(SOAPElement reasonText) {
- return xmlLangToLocale(reasonText.getAttributeValue(getXmlLangName()));
- }
-
- /*
- * Override setEncodingStyle of ElementImpl to restrict adding encodingStyle
- * attribute to SOAP Fault (SOAP 1.2 spec, part 1, section 5.1.1)
- */
- public void setEncodingStyle(String encodingStyle) throws SOAPException {
- log.severe("SAAJ0407.ver1_2.no.encodingStyle.in.fault");
- throw new SOAPExceptionImpl("encodingStyle attribute cannot appear on Fault");
- }
-
- public SOAPElement addAttribute(Name name, String value)
- throws SOAPException {
- if (name.getLocalName().equals("encodingStyle")
- && name.getURI().equals(NameImpl.SOAP12_NAMESPACE)) {
- setEncodingStyle(value);
- }
- return super.addAttribute(name, value);
- }
-
- public SOAPElement addAttribute(QName name, String value)
- throws SOAPException {
- if (name.getLocalPart().equals("encodingStyle")
- && name.getNamespaceURI().equals(NameImpl.SOAP12_NAMESPACE)) {
- setEncodingStyle(value);
- }
- return super.addAttribute(name, value);
- }
-
- public SOAPElement addTextNode(String text) throws SOAPException {
- log.log(
- Level.SEVERE,
- "SAAJ0416.ver1_2.adding.text.not.legal",
- getElementQName());
- throw new SOAPExceptionImpl("Adding text to SOAP 1.2 Fault is not legal");
- }
-
- public SOAPElement addChildElement(SOAPElement element)
- throws SOAPException {
- String localName = element.getLocalName();
- if ("Detail".equalsIgnoreCase(localName)) {
- if (hasDetail()) {
- log.severe("SAAJ0436.ver1_2.detail.exists.error");
- throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
- }
- String uri = element.getElementQName().getNamespaceURI();
- if (!uri.equals(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE)) {
- log.severe("SAAJ0437.ver1_2.version.mismatch.error");
- throw new SOAPExceptionImpl("Cannot add Detail, Incorrect SOAP version specified for Detail element");
- }
- }
- if (element instanceof Detail1_2Impl) {
- ElementImpl importedElement = (ElementImpl) importElement(element);
- addNode(importedElement);
- return convertToSoapElement(importedElement);
- } else
- return super.addChildElement(element);
- }
-
- protected boolean isStandardFaultElement(String localName) {
- if (localName.equalsIgnoreCase("code") ||
- localName.equalsIgnoreCase("reason") ||
- localName.equalsIgnoreCase("node") ||
- localName.equalsIgnoreCase("role") ||
- localName.equalsIgnoreCase("detail")) {
- return true;
- }
- return false;
- }
-
- protected QName getDefaultFaultCode() {
- return SOAPConstants.SOAP_SENDER_FAULT;
- }
-
- protected FaultElementImpl createSOAPFaultElement(QName qname) {
- return new FaultElement1_2Impl(
- ((SOAPDocument) getOwnerDocument()).getDocument(),
- qname);
- }
-
- protected FaultElementImpl createSOAPFaultElement(Name qname) {
- return new FaultElement1_2Impl(
- ((SOAPDocument) getOwnerDocument()).getDocument(),
- (NameImpl)qname);
- }
-
- public void setFaultActor(String faultActor) throws SOAPException {
- this.setFaultRole(faultActor);
- }
-
-}