diff -r a665e19ca007 -r a70f5680dbab jaxws/src/java.xml.soap/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/FaultImpl.java --- a/jaxws/src/java.xml.soap/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/FaultImpl.java Mon Jan 19 09:32:40 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +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. - */ - -package com.sun.xml.internal.messaging.saaj.soap.impl; - -import java.util.Locale; -import java.util.logging.Level; - -import javax.xml.namespace.QName; -import javax.xml.soap.*; - -import org.w3c.dom.Element; - -import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl; -import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl; -import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl; - -public abstract class FaultImpl extends ElementImpl implements SOAPFault { - - /* This can also represent a fault reason element */ - protected SOAPFaultElement faultStringElement; - - /* This can also represent a fault role element */ - protected SOAPFaultElement faultActorElement; - - protected SOAPFaultElement faultCodeElement; - - protected Detail detail; - - protected FaultImpl(SOAPDocumentImpl ownerDoc, NameImpl name) { - super(ownerDoc, name); - } - - - protected abstract NameImpl getDetailName(); - protected abstract NameImpl getFaultCodeName(); - protected abstract NameImpl getFaultStringName(); - protected abstract NameImpl getFaultActorName(); - protected abstract DetailImpl createDetail(); - protected abstract FaultElementImpl createSOAPFaultElement(String localName); - protected abstract FaultElementImpl createSOAPFaultElement(QName qname); - protected abstract FaultElementImpl createSOAPFaultElement(Name qname); - protected abstract void checkIfStandardFaultCode(String faultCode, String uri) throws SOAPException; - protected abstract void finallySetFaultCode(String faultcode) throws SOAPException; - protected abstract boolean isStandardFaultElement(String localName); - protected abstract QName getDefaultFaultCode(); - - - protected void findFaultCodeElement() { - this.faultCodeElement = - (SOAPFaultElement) findAndConvertChildElement(getFaultCodeName()); - } - - protected void findFaultActorElement() { - this.faultActorElement = - (SOAPFaultElement) findAndConvertChildElement(getFaultActorName()); - } - - protected void findFaultStringElement() { - this.faultStringElement = - (SOAPFaultElement) findAndConvertChildElement(getFaultStringName()); - } - - public void setFaultCode(String faultCode) throws SOAPException { - setFaultCode( - NameImpl.getLocalNameFromTagName(faultCode), - NameImpl.getPrefixFromTagName(faultCode), - null); - } - - public void setFaultCode(String faultCode, String prefix, String uri) - throws SOAPException { - - if (prefix == null || "".equals(prefix)) { - if (uri != null && !"".equals(uri)) { - prefix = getNamespacePrefix(uri); - if (prefix == null || "".equals(prefix)) { - prefix = "ns0"; - } - } - } - if (this.faultCodeElement == null) - findFaultCodeElement(); - - if (this.faultCodeElement == null) - this.faultCodeElement = addFaultCodeElement(); - else - this.faultCodeElement.removeContents(); - - if (uri == null || "".equals(uri)) { - uri = this.faultCodeElement.getNamespaceURI(prefix); - } - if (uri == null || "".equals(uri)) { - if (prefix != null && !"".equals(prefix)) { - //cannot allow an empty URI for a non-Empty prefix - log.log(Level.SEVERE, "SAAJ0140.impl.no.ns.URI", new Object[]{prefix + ":" + faultCode}); - throw new SOAPExceptionImpl("Empty/Null NamespaceURI specified for faultCode \"" + prefix + ":" + faultCode + "\""); - } else { - uri = ""; - } - } - checkIfStandardFaultCode(faultCode, uri); - ((FaultElementImpl) this.faultCodeElement).ensureNamespaceIsDeclared(prefix, uri); - - if (prefix == null || "".equals(prefix)) { - finallySetFaultCode(faultCode); - } else { - finallySetFaultCode(prefix + ":" + faultCode); - } - } - - public void setFaultCode(Name faultCodeQName) throws SOAPException { - setFaultCode( - faultCodeQName.getLocalName(), - faultCodeQName.getPrefix(), - faultCodeQName.getURI()); - } - - public void setFaultCode(QName faultCodeQName) throws SOAPException { - setFaultCode( - faultCodeQName.getLocalPart(), - faultCodeQName.getPrefix(), - faultCodeQName.getNamespaceURI()); - } - - protected static QName convertCodeToQName( - String code, - SOAPElement codeContainingElement) { - - int prefixIndex = code.indexOf(':'); - if (prefixIndex == -1) { - return new QName(code); - } - - String prefix = code.substring(0, prefixIndex); - String nsName =((ElementImpl) codeContainingElement).lookupNamespaceURI(prefix); - //((ElementImpl) codeContainingElement).getNamespaceURI(prefix); - return new QName(nsName, getLocalPart(code), prefix); - } - - protected void initializeDetail() { - NameImpl detailName = getDetailName(); - detail = (Detail) findAndConvertChildElement(detailName); - } - - public Detail getDetail() { - if (detail == null) - initializeDetail(); - if ((detail != null) && (detail.getParentNode() == null)) { - // a detach node was called on it - detail = null; - } - return detail; - } - - public Detail addDetail() throws SOAPException { - if (detail == null) - initializeDetail(); - if (detail == null) { - detail = createDetail(); - addNode(detail); - return detail; - } else { - // Log - throw new SOAPExceptionImpl("Error: Detail already exists"); - } - } - - public boolean hasDetail() { - return (getDetail() != null); - } - - public abstract void setFaultActor(String faultActor) throws SOAPException; - - public String getFaultActor() { - if (this.faultActorElement == null) - findFaultActorElement(); - if (this.faultActorElement != null) { - return this.faultActorElement.getValue(); - } - return null; - } - - public SOAPElement setElementQName(QName newName) throws SOAPException { - - log.log( - Level.SEVERE, - "SAAJ0146.impl.invalid.name.change.requested", - new Object[] {elementQName.getLocalPart(), newName.getLocalPart()}); - throw new SOAPException( - "Cannot change name for " + elementQName.getLocalPart() + " to " + newName.getLocalPart()); - } - - protected SOAPElement convertToSoapElement(Element element) { - if (element instanceof SOAPFaultElement) { - return (SOAPElement) element; - } else if (element instanceof SOAPElement) { - SOAPElement soapElement = (SOAPElement) element; - if (getDetailName().equals(soapElement.getElementName())) { - return replaceElementWithSOAPElement(element, createDetail()); - } else { - String localName = - soapElement.getElementName().getLocalName(); - if (isStandardFaultElement(localName)) - return replaceElementWithSOAPElement( - element, - createSOAPFaultElement(soapElement.getElementQName())); - return soapElement; - } - } else { - Name elementName = NameImpl.copyElementName(element); - ElementImpl newElement; - if (getDetailName().equals(elementName)) { - newElement = (ElementImpl) createDetail(); - } else { - String localName = elementName.getLocalName(); - if (isStandardFaultElement(localName)) - newElement = - (ElementImpl) createSOAPFaultElement(elementName); - else - newElement = (ElementImpl) createElement(elementName); - } - return replaceElementWithSOAPElement(element, newElement); - } - } - - protected SOAPFaultElement addFaultCodeElement() throws SOAPException { - if (this.faultCodeElement == null) - findFaultCodeElement(); - if (this.faultCodeElement == null) { - this.faultCodeElement = - addSOAPFaultElement(getFaultCodeName().getLocalName()); - return this.faultCodeElement; - } else { - throw new SOAPExceptionImpl("Error: Faultcode already exists"); - } - } - - private SOAPFaultElement addFaultStringElement() throws SOAPException { - if (this.faultStringElement == null) - findFaultStringElement(); - if (this.faultStringElement == null) { - this.faultStringElement = - addSOAPFaultElement(getFaultStringName().getLocalName()); - return this.faultStringElement; - } else { - // Log - throw new SOAPExceptionImpl("Error: Faultstring already exists"); - } - } - - private SOAPFaultElement addFaultActorElement() throws SOAPException { - if (this.faultActorElement == null) - findFaultActorElement(); - if (this.faultActorElement == null) { - this.faultActorElement = - addSOAPFaultElement(getFaultActorName().getLocalName()); - return this.faultActorElement; - } else { - // Log - throw new SOAPExceptionImpl("Error: Faultactor already exists"); - } - } - - protected SOAPElement addElement(Name name) throws SOAPException { - if (getDetailName().equals(name)) { - return addDetail(); - } else if(getFaultCodeName().equals(name)) { - return addFaultCodeElement(); - } else if(getFaultStringName().equals(name)) { - return addFaultStringElement(); - } else if(getFaultActorName().equals(name)) { - return addFaultActorElement(); - } - return super.addElement(name); - } - - protected SOAPElement addElement(QName name) throws SOAPException { - return addElement(NameImpl.convertToName(name)); - } - - protected FaultElementImpl addSOAPFaultElement(String localName) - throws SOAPException { - - FaultElementImpl faultElem = createSOAPFaultElement(localName); - addNode(faultElem); - return faultElem; - } - - /** - * Convert an xml:lang attribute value into a Locale object - */ - protected static Locale xmlLangToLocale(String xmlLang) { - if (xmlLang == null) { - return null; - } - - // Spec uses hyphen as separator - int index = xmlLang.indexOf("-"); - - // Accept underscore as separator as well - if (index == -1) { - index = xmlLang.indexOf("_"); - } - - if (index == -1) { - // No separator so assume only a language component - return new Locale(xmlLang, ""); - } - - String language = xmlLang.substring(0, index); - String country = xmlLang.substring(index + 1); - return new Locale(language, country); - } - - protected static String localeToXmlLang(Locale locale) { - String xmlLang = locale.getLanguage(); - String country = locale.getCountry(); - if (!"".equals(country)) { - xmlLang += "-" + country; - } - return xmlLang; - } -}