jaxws/src/java.xml.soap/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl.java
changeset 28644 a70f5680dbab
parent 28643 a665e19ca007
parent 28642 a42fefc69922
child 28647 f44908f03772
--- a/jaxws/src/java.xml.soap/share/classes/com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl.java	Mon Jan 19 09:32:40 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1290 +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.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.xml.namespace.QName;
-import javax.xml.soap.*;
-
-import org.w3c.dom.*;
-import org.w3c.dom.Node;
-
-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.name.NameImpl;
-import com.sun.xml.internal.messaging.saaj.util.*;
-
-public class ElementImpl
-    extends com.sun.org.apache.xerces.internal.dom.ElementNSImpl
-    implements SOAPElement, SOAPBodyElement {
-
-    public static final String DSIG_NS = "http://www.w3.org/2000/09/xmldsig#".intern();
-    public static final String XENC_NS = "http://www.w3.org/2001/04/xmlenc#".intern();
-    public static final String WSU_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd".intern();
-
-    private transient AttributeManager encodingStyleAttribute = new AttributeManager();
-
-    protected QName elementQName;
-
-    protected static final Logger log =
-        Logger.getLogger(LogDomainConstants.SOAP_IMPL_DOMAIN,
-                         "com.sun.xml.internal.messaging.saaj.soap.impl.LocalStrings");
-
-    /**
-     * XML Information Set REC
-     * all namespace attributes (including those named xmlns,
-     * whose [prefix] property has no value) have a namespace URI of http://www.w3.org/2000/xmlns/
-     */
-    public final static String XMLNS_URI = "http://www.w3.org/2000/xmlns/".intern();
-
-    /**
-     * The XML Namespace ("http://www.w3.org/XML/1998/namespace"). This is
-     * the Namespace URI that is automatically mapped to the "xml" prefix.
-     */
-    public final static String XML_URI = "http://www.w3.org/XML/1998/namespace".intern();
-
-    public ElementImpl(SOAPDocumentImpl ownerDoc, Name name) {
-        super(
-            ownerDoc,
-            name.getURI(),
-            name.getQualifiedName(),
-            name.getLocalName());
-        elementQName = NameImpl.convertToQName(name);
-    }
-
-    public ElementImpl(SOAPDocumentImpl ownerDoc, QName name) {
-        super(
-            ownerDoc,
-            name.getNamespaceURI(),
-            getQualifiedName(name),
-            name.getLocalPart());
-        elementQName = name;
-    }
-
-    public ElementImpl(
-        SOAPDocumentImpl ownerDoc,
-        String uri,
-        String qualifiedName) {
-
-        super(ownerDoc, uri, qualifiedName);
-        elementQName =
-            new QName(uri, getLocalPart(qualifiedName), getPrefix(qualifiedName));
-    }
-
-    public void ensureNamespaceIsDeclared(String prefix, String uri) {
-        String alreadyDeclaredUri = getNamespaceURI(prefix);
-        if (alreadyDeclaredUri == null || !alreadyDeclaredUri.equals(uri)) {
-            try {
-                addNamespaceDeclaration(prefix, uri);
-            } catch (SOAPException e) { /*ignore*/
-            }
-        }
-    }
-
-    public Document getOwnerDocument() {
-        Document doc = super.getOwnerDocument();
-        if (doc instanceof SOAPDocument)
-            return ((SOAPDocument) doc).getDocument();
-        else
-            return doc;
-    }
-
-    public SOAPElement addChildElement(Name name) throws SOAPException {
-        return  addElement(name);
-    }
-
-    public SOAPElement addChildElement(QName qname) throws SOAPException {
-        return  addElement(qname);
-    }
-
-    public SOAPElement addChildElement(String localName) throws SOAPException {
-        return (SOAPElement) addChildElement(
-            NameImpl.createFromUnqualifiedName(localName));
-    }
-
-    public SOAPElement addChildElement(String localName, String prefix)
-        throws SOAPException {
-        String uri = getNamespaceURI(prefix);
-        if (uri == null) {
-            log.log(
-                Level.SEVERE,
-                "SAAJ0101.impl.parent.of.body.elem.mustbe.body",
-                new String[] { prefix });
-            throw new SOAPExceptionImpl(
-                "Unable to locate namespace for prefix " + prefix);
-        }
-        return addChildElement(localName, prefix, uri);
-    }
-
-    public String getNamespaceURI(String prefix) {
-
-        if ("xmlns".equals(prefix)) {
-            return XMLNS_URI;
-        }
-
-        if("xml".equals(prefix)) {
-            return XML_URI;
-        }
-
-        if ("".equals(prefix)) {
-
-            org.w3c.dom.Node currentAncestor = this;
-            while (currentAncestor != null &&
-                   !(currentAncestor instanceof Document)) {
-
-                if (currentAncestor instanceof ElementImpl) {
-                    QName name = ((ElementImpl) currentAncestor).getElementQName();
-                    /*
-                    if (prefix.equals(name.getPrefix())) {
-                        String uri = name.getNamespaceURI();
-                        if ("".equals(uri)) {
-                            return null;
-                        }
-                        else {
-                            return uri;
-                        }
-                    }*/
-                    if (((Element) currentAncestor).hasAttributeNS(
-                            XMLNS_URI, "xmlns")) {
-
-                        String uri =
-                            ((Element) currentAncestor).getAttributeNS(
-                                XMLNS_URI, "xmlns");
-                        if ("".equals(uri))
-                            return null;
-                        else {
-                            return uri;
-                        }
-                    }
-                }
-                currentAncestor = currentAncestor.getParentNode();
-            }
-
-        } else if (prefix != null) {
-            // Find if there's an ancester whose name contains this prefix
-            org.w3c.dom.Node currentAncestor = this;
-
-//            String uri = currentAncestor.lookupNamespaceURI(prefix);
-//            return uri;
-            while (currentAncestor != null &&
-                   !(currentAncestor instanceof Document)) {
-
-               /* if (prefix.equals(currentAncestor.getPrefix())) {
-                    String uri = currentAncestor.getNamespaceURI();
-                    // this is because the javadoc says getNamespaceURI() is not a computed value
-                    // and URI for a non-empty prefix cannot be null
-                    if (uri != null)
-                        return uri;
-                }*/
-                //String uri = currentAncestor.lookupNamespaceURI(prefix);
-                //if (uri != null) {
-                //    return uri;
-                //}
-
-                if (((Element) currentAncestor).hasAttributeNS(
-                        XMLNS_URI, prefix)) {
-                    return ((Element) currentAncestor).getAttributeNS(
-                               XMLNS_URI, prefix);
-                }
-
-                currentAncestor = currentAncestor.getParentNode();
-            }
-        }
-
-        return null;
-    }
-
-    public SOAPElement setElementQName(QName newName) throws SOAPException {
-        ElementImpl copy =
-            new ElementImpl((SOAPDocumentImpl) getOwnerDocument(), newName);
-        return replaceElementWithSOAPElement(this,copy);
-    }
-
-    public QName createQName(String localName, String prefix)
-        throws SOAPException {
-        String uri = getNamespaceURI(prefix);
-        if (uri == null) {
-            log.log(Level.SEVERE, "SAAJ0102.impl.cannot.locate.ns",
-                    new Object[] {prefix});
-            throw new SOAPException("Unable to locate namespace for prefix "
-                                    + prefix);
-        }
-        return new QName(uri, localName, prefix);
-    }
-
-    public String getNamespacePrefix(String uri) {
-
-        NamespaceContextIterator eachNamespace = getNamespaceContextNodes();
-        while (eachNamespace.hasNext()) {
-            org.w3c.dom.Attr namespaceDecl = eachNamespace.nextNamespaceAttr();
-            if (namespaceDecl.getNodeValue().equals(uri)) {
-                String candidatePrefix = namespaceDecl.getLocalName();
-                if ("xmlns".equals(candidatePrefix))
-                    return "";
-                else
-                    return candidatePrefix;
-            }
-        }
-
-        // Find if any of the ancestors' name has this uri
-        org.w3c.dom.Node currentAncestor = this;
-        while (currentAncestor != null &&
-               !(currentAncestor instanceof Document)) {
-
-            if (uri.equals(currentAncestor.getNamespaceURI()))
-                return currentAncestor.getPrefix();
-            currentAncestor = currentAncestor.getParentNode();
-        }
-
-        return null;
-    }
-
-    protected org.w3c.dom.Attr getNamespaceAttr(String prefix) {
-        NamespaceContextIterator eachNamespace = getNamespaceContextNodes();
-        if (!"".equals(prefix))
-            prefix = ":"+prefix;
-        while (eachNamespace.hasNext()) {
-            org.w3c.dom.Attr namespaceDecl = eachNamespace.nextNamespaceAttr();
-            if (!"".equals(prefix)) {
-                if (namespaceDecl.getNodeName().endsWith(prefix))
-                    return namespaceDecl;
-            } else {
-                if (namespaceDecl.getNodeName().equals("xmlns"))
-                    return namespaceDecl;
-            }
-        }
-        return null;
-    }
-
-    public NamespaceContextIterator getNamespaceContextNodes() {
-        return getNamespaceContextNodes(true);
-    }
-
-    public NamespaceContextIterator getNamespaceContextNodes(boolean traverseStack) {
-        return new NamespaceContextIterator(this, traverseStack);
-    }
-
-    public SOAPElement addChildElement(
-        String localName,
-        String prefix,
-        String uri)
-        throws SOAPException {
-
-        SOAPElement newElement = createElement(NameImpl.create(localName, prefix, uri));
-        addNode(newElement);
-        return convertToSoapElement(newElement);
-    }
-
-    public SOAPElement addChildElement(SOAPElement element)
-        throws SOAPException {
-
-        // check if Element falls in SOAP 1.1 or 1.2 namespace.
-        String elementURI = element.getElementName().getURI();
-        String localName = element.getLocalName();
-
-        if ((SOAPConstants.URI_NS_SOAP_ENVELOPE).equals(elementURI)
-            || (SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE).equals(elementURI)) {
-
-
-            if ("Envelope".equalsIgnoreCase(localName) ||
-                "Header".equalsIgnoreCase(localName) || "Body".equalsIgnoreCase(localName)) {
-                log.severe("SAAJ0103.impl.cannot.add.fragements");
-                throw new SOAPExceptionImpl(
-                    "Cannot add fragments which contain elements "
-                        + "which are in the SOAP namespace");
-            }
-
-            if ("Fault".equalsIgnoreCase(localName) && !"Body".equalsIgnoreCase(this.getLocalName())) {
-                log.severe("SAAJ0154.impl.adding.fault.to.nonbody");
-                throw new SOAPExceptionImpl("Cannot add a SOAPFault as a child of " + this.getLocalName());
-            }
-
-            if ("Detail".equalsIgnoreCase(localName) && !"Fault".equalsIgnoreCase(this.getLocalName())) {
-                log.severe("SAAJ0155.impl.adding.detail.nonfault");
-                throw new SOAPExceptionImpl("Cannot add a Detail as a child of " + this.getLocalName());
-            }
-
-            if ("Fault".equalsIgnoreCase(localName)) {
-               // if body is not empty throw an exception
-               if (!elementURI.equals(this.getElementName().getURI())) {
-                   log.severe("SAAJ0158.impl.version.mismatch.fault");
-                   throw new SOAPExceptionImpl("SOAP Version mismatch encountered when trying to add SOAPFault to SOAPBody");
-               }
-               Iterator it = this.getChildElements();
-               if (it.hasNext()) {
-                   log.severe("SAAJ0156.impl.adding.fault.error");
-                   throw new SOAPExceptionImpl("Cannot add SOAPFault as a child of a non-Empty SOAPBody");
-               }
-            }
-        }
-
-        // preserve the encodingStyle attr as it may get lost in the import
-        String encodingStyle = element.getEncodingStyle();
-
-        ElementImpl importedElement = (ElementImpl) importElement(element);
-        addNode(importedElement);
-
-        if (encodingStyle != null)
-            importedElement.setEncodingStyle(encodingStyle);
-
-        return convertToSoapElement(importedElement);
-    }
-
-    protected Element importElement(Element element) {
-        Document document = getOwnerDocument();
-        Document oldDocument = element.getOwnerDocument();
-        if (!oldDocument.equals(document)) {
-            return (Element) document.importNode(element, true);
-        } else {
-            return element;
-        }
-    }
-
-    protected SOAPElement addElement(Name name) throws SOAPException {
-        SOAPElement newElement = createElement(name);
-        addNode(newElement);
-        return circumventBug5034339(newElement);
-    }
-
-    protected SOAPElement addElement(QName name) throws SOAPException {
-        SOAPElement newElement = createElement(name);
-        addNode(newElement);
-        return circumventBug5034339(newElement);
-    }
-
-    protected SOAPElement createElement(Name name) {
-
-        if (isNamespaceQualified(name)) {
-            return (SOAPElement)
-                getOwnerDocument().createElementNS(
-                                       name.getURI(),
-                                       name.getQualifiedName());
-        } else {
-            return (SOAPElement)
-                getOwnerDocument().createElement(name.getQualifiedName());
-        }
-    }
-
-    protected SOAPElement createElement(QName name) {
-
-        if (isNamespaceQualified(name)) {
-            return (SOAPElement)
-                getOwnerDocument().createElementNS(
-                                       name.getNamespaceURI(),
-                                       getQualifiedName(name));
-        } else {
-            return (SOAPElement)
-                getOwnerDocument().createElement(getQualifiedName(name));
-        }
-    }
-
-    protected void addNode(org.w3c.dom.Node newElement) throws SOAPException {
-        insertBefore(newElement, null);
-
-        if (getOwnerDocument() instanceof DocumentFragment)
-            return;
-
-        if (newElement instanceof ElementImpl) {
-            ElementImpl element = (ElementImpl) newElement;
-            QName elementName = element.getElementQName();
-            if (!"".equals(elementName.getNamespaceURI())) {
-                element.ensureNamespaceIsDeclared(
-                    elementName.getPrefix(), elementName.getNamespaceURI());
-            }
-        }
-
-    }
-
-    Element getFirstChildElement() {
-        Node child = getFirstChild();
-        while (child != null) {
-            if (child instanceof Element) {
-                return ((Element) child);
-            }
-            child = child.getNextSibling();
-        }
-        return null;
-    }
-
-    protected SOAPElement findChild(NameImpl name) {
-        Node eachChild = getFirstChild();
-        while (eachChild != null) {
-            if (eachChild instanceof SOAPElement) {
-                SOAPElement eachChildSoap = (SOAPElement) eachChild;
-                if (eachChildSoap.getElementName().equals(name)) {
-                    return eachChildSoap;
-                }
-            }
-            eachChild = eachChild.getNextSibling();
-        }
-        return null;
-    }
-
-    protected SOAPElement findAndConvertChildElement(NameImpl name) {
-        Iterator eachChild = getChildElementNodes();
-        while (eachChild.hasNext()) {
-            SOAPElement child = (SOAPElement) eachChild.next();
-            if (child.getElementName().equals(name)) {
-                return child;
-            }
-        }
-
-        return null;
-    }
-
-    public SOAPElement addTextNode(String text) throws SOAPException {
-        if (text.startsWith(CDATAImpl.cdataUC)
-            || text.startsWith(CDATAImpl.cdataLC))
-            return addCDATA(
-                text.substring(CDATAImpl.cdataUC.length(), text.length() - 3));
-        return addText(text);
-    }
-
-    protected SOAPElement addCDATA(String text) throws SOAPException {
-        org.w3c.dom.Text cdata =
-            (org.w3c.dom.Text) getOwnerDocument().createCDATASection(text);
-        addNode(cdata);
-        return this;
-    }
-
-    protected SOAPElement addText(String text) throws SOAPException {
-        org.w3c.dom.Text textNode =
-            (org.w3c.dom.Text) getOwnerDocument().createTextNode(text);
-        addNode(textNode);
-        return this;
-    }
-
-    public SOAPElement addAttribute(Name name, String value)
-        throws SOAPException {
-        addAttributeBare(name, value);
-        if (!"".equals(name.getURI())) {
-            ensureNamespaceIsDeclared(name.getPrefix(), name.getURI());
-        }
-        return this;
-    }
-
-    public SOAPElement addAttribute(QName qname, String value)
-        throws SOAPException {
-        addAttributeBare(qname, value);
-        if (!"".equals(qname.getNamespaceURI())) {
-            ensureNamespaceIsDeclared(qname.getPrefix(), qname.getNamespaceURI());
-        }
-        return this;
-    }
-
-    private void addAttributeBare(Name name, String value) {
-        addAttributeBare(
-            name.getURI(),
-            name.getPrefix(),
-            name.getQualifiedName(),
-            value);
-    }
-    private void addAttributeBare(QName name, String value) {
-        addAttributeBare(
-            name.getNamespaceURI(),
-            name.getPrefix(),
-            getQualifiedName(name),
-            value);
-    }
-
-    private void addAttributeBare(
-        String uri,
-        String prefix,
-        String qualifiedName,
-        String value) {
-
-        uri = uri.length() == 0 ? null : uri;
-        if (qualifiedName.equals("xmlns")) {
-            uri = XMLNS_URI;
-        }
-
-        if (uri == null) {
-            setAttribute(qualifiedName, value);
-        } else {
-            setAttributeNS(uri, qualifiedName, value);
-        }
-    }
-
-    public SOAPElement addNamespaceDeclaration(String prefix, String uri)
-        throws SOAPException {
-        if (prefix.length() > 0) {
-            setAttributeNS(XMLNS_URI, "xmlns:" + prefix, uri);
-        } else {
-            setAttributeNS(XMLNS_URI, "xmlns", uri);
-        }
-        //Fix for CR:6474641
-        //tryToFindEncodingStyleAttributeName();
-        return this;
-    }
-
-    public String getAttributeValue(Name name) {
-        return getAttributeValueFrom(this, name);
-    }
-
-    public String getAttributeValue(QName qname) {
-        return getAttributeValueFrom(
-                   this,
-                   qname.getNamespaceURI(),
-                   qname.getLocalPart(),
-                   qname.getPrefix(),
-                   getQualifiedName(qname));
-    }
-
-    public Iterator getAllAttributes() {
-        Iterator i = getAllAttributesFrom(this);
-        ArrayList list = new ArrayList();
-        while (i.hasNext()) {
-            Name name = (Name) i.next();
-            if (!"xmlns".equalsIgnoreCase(name.getPrefix()))
-                list.add(name);
-        }
-        return list.iterator();
-    }
-
-    public Iterator getAllAttributesAsQNames() {
-        Iterator i = getAllAttributesFrom(this);
-        ArrayList list = new ArrayList();
-        while (i.hasNext()) {
-            Name name = (Name) i.next();
-            if (!"xmlns".equalsIgnoreCase(name.getPrefix())) {
-                list.add(NameImpl.convertToQName(name));
-            }
-        }
-        return list.iterator();
-    }
-
-
-    public Iterator getNamespacePrefixes() {
-        return doGetNamespacePrefixes(false);
-    }
-
-    public Iterator getVisibleNamespacePrefixes() {
-        return doGetNamespacePrefixes(true);
-    }
-
-    protected Iterator doGetNamespacePrefixes(final boolean deep) {
-        return new Iterator() {
-            String next = null;
-            String last = null;
-            NamespaceContextIterator eachNamespace =
-                getNamespaceContextNodes(deep);
-
-            void findNext() {
-                while (next == null && eachNamespace.hasNext()) {
-                    String attributeKey =
-                        eachNamespace.nextNamespaceAttr().getNodeName();
-                    if (attributeKey.startsWith("xmlns:")) {
-                        next = attributeKey.substring("xmlns:".length());
-                    }
-                }
-            }
-
-            public boolean hasNext() {
-                findNext();
-                return next != null;
-            }
-
-            public Object next() {
-                findNext();
-                if (next == null) {
-                    throw new NoSuchElementException();
-                }
-
-                last = next;
-                next = null;
-                return last;
-            }
-
-            public void remove() {
-                if (last == null) {
-                    throw new IllegalStateException();
-                }
-                eachNamespace.remove();
-                next = null;
-                last = null;
-            }
-        };
-    }
-
-    public Name getElementName() {
-        return NameImpl.convertToName(elementQName);
-    }
-
-    public QName getElementQName() {
-        return elementQName;
-    }
-
-    public boolean removeAttribute(Name name) {
-        return removeAttribute(name.getURI(), name.getLocalName());
-    }
-
-    public boolean removeAttribute(QName name) {
-        return removeAttribute(name.getNamespaceURI(), name.getLocalPart());
-    }
-
-    private boolean removeAttribute(String uri, String localName) {
-        String nonzeroLengthUri =
-            (uri == null || uri.length() == 0) ? null : uri;
-        org.w3c.dom.Attr attribute =
-            getAttributeNodeNS(nonzeroLengthUri, localName);
-        if (attribute == null) {
-            return false;
-        }
-        removeAttributeNode(attribute);
-        return true;
-    }
-
-    public boolean removeNamespaceDeclaration(String prefix) {
-        org.w3c.dom.Attr declaration = getNamespaceAttr(prefix);
-        if (declaration == null) {
-            return false;
-        }
-        try {
-            removeAttributeNode(declaration);
-        } catch (DOMException de) {
-            // ignore
-        }
-        return true;
-    }
-
-    public Iterator getChildElements() {
-        return getChildElementsFrom(this);
-    }
-
-    protected SOAPElement convertToSoapElement(Element element) {
-        if (element instanceof SOAPElement) {
-            return (SOAPElement) element;
-        } else {
-            return replaceElementWithSOAPElement(
-                element,
-                (ElementImpl) createElement(NameImpl.copyElementName(element)));
-        }
-    }
-
-    protected static SOAPElement replaceElementWithSOAPElement(
-        Element element,
-        ElementImpl copy) {
-
-        Iterator eachAttribute = getAllAttributesFrom(element);
-        while (eachAttribute.hasNext()) {
-            Name name = (Name) eachAttribute.next();
-            copy.addAttributeBare(name, getAttributeValueFrom(element, name));
-        }
-
-        Iterator eachChild = getChildElementsFrom(element);
-        while (eachChild.hasNext()) {
-            Node nextChild = (Node) eachChild.next();
-            copy.insertBefore(nextChild, null);
-        }
-
-        Node parent = element.getParentNode();
-        if (parent != null) {
-            parent.replaceChild(copy, element);
-        } // XXX else throw an exception?
-
-        return copy;
-    }
-
-    protected Iterator getChildElementNodes() {
-        return new Iterator() {
-            Iterator eachNode = getChildElements();
-            Node next = null;
-            Node last = null;
-
-            public boolean hasNext() {
-                if (next == null) {
-                    while (eachNode.hasNext()) {
-                        Node node = (Node) eachNode.next();
-                        if (node instanceof SOAPElement) {
-                            next = node;
-                            break;
-                        }
-                    }
-                }
-                return next != null;
-            }
-
-            public Object next() {
-                if (hasNext()) {
-                    last = next;
-                    next = null;
-                    return last;
-                }
-                throw new NoSuchElementException();
-            }
-
-            public void remove() {
-                if (last == null) {
-                    throw new IllegalStateException();
-                }
-                Node target = last;
-                last = null;
-                removeChild(target);
-            }
-        };
-    }
-
-    public Iterator getChildElements(final Name name) {
-       return getChildElements(name.getURI(), name.getLocalName());
-    }
-
-    public Iterator getChildElements(final QName qname) {
-        return getChildElements(qname.getNamespaceURI(), qname.getLocalPart());
-    }
-
-    private Iterator getChildElements(final String nameUri, final String nameLocal) {
-        return new Iterator() {
-            Iterator eachElement = getChildElementNodes();
-            Node next = null;
-            Node last = null;
-
-            public boolean hasNext() {
-                if (next == null) {
-                    while (eachElement.hasNext()) {
-                        Node element = (Node) eachElement.next();
-                        String elementUri = element.getNamespaceURI();
-                        elementUri = elementUri == null ? "" : elementUri;
-                        String elementName = element.getLocalName();
-                        if (elementUri.equals(nameUri)
-                            && elementName.equals(nameLocal)) {
-                            next = element;
-                            break;
-                        }
-                    }
-                }
-                return next != null;
-            }
-
-            public Object next() {
-                if (!hasNext()) {
-                    throw new NoSuchElementException();
-                }
-                last = next;
-                next = null;
-                return last;
-            }
-
-            public void remove() {
-                if (last == null) {
-                    throw new IllegalStateException();
-                }
-                Node target = last;
-                last = null;
-                removeChild(target);
-            }
-        };
-    }
-
-    public void removeContents() {
-        Node currentChild = getFirstChild();
-
-        while (currentChild != null) {
-            Node temp = currentChild.getNextSibling();
-            if (currentChild instanceof javax.xml.soap.Node) {
-                ((javax.xml.soap.Node) currentChild).detachNode();
-            } else {
-                Node parent = currentChild.getParentNode();
-                if (parent != null) {
-                    parent.removeChild(currentChild);
-                }
-
-            }
-            currentChild = temp;
-        }
-    }
-
-    public void setEncodingStyle(String encodingStyle) throws SOAPException {
-        if (!"".equals(encodingStyle)) {
-            try {
-                new URI(encodingStyle);
-            } catch (URISyntaxException m) {
-                log.log(
-                    Level.SEVERE,
-                    "SAAJ0105.impl.encoding.style.mustbe.valid.URI",
-                    new String[] { encodingStyle });
-                throw new IllegalArgumentException(
-                    "Encoding style (" + encodingStyle + ") should be a valid URI");
-            }
-        }
-        encodingStyleAttribute.setValue(encodingStyle);
-        tryToFindEncodingStyleAttributeName();
-    }
-
-    public String getEncodingStyle() {
-        String encodingStyle = encodingStyleAttribute.getValue();
-        if (encodingStyle != null)
-            return encodingStyle;
-        String soapNamespace = getSOAPNamespace();
-        if (soapNamespace != null) {
-            Attr attr = getAttributeNodeNS(soapNamespace, "encodingStyle");
-            if (attr != null) {
-                encodingStyle = attr.getValue();
-                try {
-                    setEncodingStyle(encodingStyle);
-                } catch (SOAPException se) {
-                    // has to be ignored
-                }
-                return encodingStyle;
-            }
-        }
-        return null;
-    }
-
-    // Node methods
-    public String getValue() {
-        javax.xml.soap.Node valueNode = getValueNode();
-        return valueNode == null ? null : valueNode.getValue();
-    }
-
-    public void setValue(String value) {
-        Node valueNode = getValueNodeStrict();
-        if (valueNode != null) {
-            valueNode.setNodeValue(value);
-        } else {
-            try {
-                addTextNode(value);
-            } catch (SOAPException e) {
-                throw new RuntimeException(e.getMessage());
-            }
-        }
-    }
-
-    protected Node getValueNodeStrict() {
-        Node node = getFirstChild();
-        if (node != null) {
-            if (node.getNextSibling() == null
-                && node.getNodeType() == org.w3c.dom.Node.TEXT_NODE) {
-                return node;
-            } else {
-                log.severe("SAAJ0107.impl.elem.child.not.single.text");
-                throw new IllegalStateException();
-            }
-        }
-
-        return null;
-    }
-
-    protected javax.xml.soap.Node getValueNode() {
-        Iterator i = getChildElements();
-        while (i.hasNext()) {
-            javax.xml.soap.Node n = (javax.xml.soap.Node) i.next();
-            if (n.getNodeType() == org.w3c.dom.Node.TEXT_NODE ||
-                n.getNodeType() == org.w3c.dom.Node.CDATA_SECTION_NODE) {
-                // TODO: Hack to fix text node split into multiple lines.
-                normalize();
-                // Should remove the normalization step when this gets fixed in
-                // DOM/Xerces.
-                return (javax.xml.soap.Node) n;
-            }
-        }
-        return null;
-    }
-
-    public void setParentElement(SOAPElement element) throws SOAPException {
-        if (element == null) {
-            log.severe("SAAJ0106.impl.no.null.to.parent.elem");
-            throw new SOAPException("Cannot pass NULL to setParentElement");
-        }
-        element.addChildElement(this);
-        findEncodingStyleAttributeName();
-    }
-
-    protected void findEncodingStyleAttributeName() throws SOAPException {
-        String soapNamespace = getSOAPNamespace();
-        if (soapNamespace != null) {
-            String soapNamespacePrefix = getNamespacePrefix(soapNamespace);
-            if (soapNamespacePrefix != null) {
-                setEncodingStyleNamespace(soapNamespace, soapNamespacePrefix);
-            }
-        }
-    }
-
-    protected void setEncodingStyleNamespace(
-        String soapNamespace,
-        String soapNamespacePrefix)
-        throws SOAPException {
-        Name encodingStyleAttributeName =
-            NameImpl.create(
-                "encodingStyle",
-                soapNamespacePrefix,
-                soapNamespace);
-        encodingStyleAttribute.setName(encodingStyleAttributeName);
-    }
-
-    public SOAPElement getParentElement() {
-        Node parentNode = getParentNode();
-        if (parentNode instanceof SOAPDocument) {
-            return null;
-        }
-        return (SOAPElement) parentNode;
-    }
-
-    protected String getSOAPNamespace() {
-        String soapNamespace = null;
-
-        SOAPElement antecedent = this;
-        while (antecedent != null) {
-            Name antecedentName = antecedent.getElementName();
-            String antecedentNamespace = antecedentName.getURI();
-
-            if (NameImpl.SOAP11_NAMESPACE.equals(antecedentNamespace)
-                || NameImpl.SOAP12_NAMESPACE.equals(antecedentNamespace)) {
-
-                soapNamespace = antecedentNamespace;
-                break;
-            }
-
-            antecedent = antecedent.getParentElement();
-        }
-
-        return soapNamespace;
-    }
-
-    public void detachNode() {
-        Node parent = getParentNode();
-        if (parent != null) {
-            parent.removeChild(this);
-        }
-        encodingStyleAttribute.clearNameAndValue();
-        // Fix for CR: 6474641
-        //tryToFindEncodingStyleAttributeName();
-    }
-
-    public void tryToFindEncodingStyleAttributeName() {
-        try {
-            findEncodingStyleAttributeName();
-        } catch (SOAPException e) { /*okay to fail*/
-        }
-    }
-
-    public void recycleNode() {
-        detachNode();
-        // TBD
-        //  - add this to the factory so subsequent
-        //    creations can reuse this object.
-    }
-
-    class AttributeManager {
-        Name attributeName = null;
-        String attributeValue = null;
-
-        public void setName(Name newName) throws SOAPException {
-            clearAttribute();
-            attributeName = newName;
-            reconcileAttribute();
-        }
-        public void clearName() {
-            clearAttribute();
-            attributeName = null;
-        }
-        public void setValue(String value) throws SOAPException {
-            attributeValue = value;
-            reconcileAttribute();
-        }
-        public Name getName() {
-            return attributeName;
-        }
-        public String getValue() {
-            return attributeValue;
-        }
-
-        /** Note: to be used only in detachNode method */
-        public void clearNameAndValue() {
-            attributeName = null;
-            attributeValue = null;
-        }
-
-        private void reconcileAttribute() throws SOAPException {
-            if (attributeName != null) {
-                removeAttribute(attributeName);
-                if (attributeValue != null) {
-                    addAttribute(attributeName, attributeValue);
-                }
-            }
-        }
-        private void clearAttribute() {
-            if (attributeName != null) {
-                removeAttribute(attributeName);
-            }
-        }
-    }
-
-    protected static org.w3c.dom.Attr getNamespaceAttrFrom(
-        Element element,
-        String prefix) {
-        NamespaceContextIterator eachNamespace =
-            new NamespaceContextIterator(element);
-        while (eachNamespace.hasNext()) {
-            org.w3c.dom.Attr namespaceDecl = eachNamespace.nextNamespaceAttr();
-            String declaredPrefix =
-                NameImpl.getLocalNameFromTagName(namespaceDecl.getNodeName());
-            if (declaredPrefix.equals(prefix)) {
-                return namespaceDecl;
-            }
-        }
-        return null;
-    }
-
-    protected static Iterator getAllAttributesFrom(final Element element) {
-        final NamedNodeMap attributes = element.getAttributes();
-
-        return new Iterator() {
-            int attributesLength = attributes.getLength();
-            int attributeIndex = 0;
-            String currentName;
-
-            public boolean hasNext() {
-                return attributeIndex < attributesLength;
-            }
-
-            public Object next() {
-                if (!hasNext()) {
-                    throw new NoSuchElementException();
-                }
-                Node current = attributes.item(attributeIndex++);
-                currentName = current.getNodeName();
-
-                String prefix = NameImpl.getPrefixFromTagName(currentName);
-                if (prefix.length() == 0) {
-                    return NameImpl.createFromUnqualifiedName(currentName);
-                } else {
-                    Name attributeName =
-                        NameImpl.createFromQualifiedName(
-                            currentName,
-                            current.getNamespaceURI());
-                    return attributeName;
-                }
-            }
-
-            public void remove() {
-                if (currentName == null) {
-                    throw new IllegalStateException();
-                }
-                attributes.removeNamedItem(currentName);
-            }
-        };
-    }
-
-    protected static String getAttributeValueFrom(Element element, Name name) {
-      return getAttributeValueFrom(
-          element,
-          name.getURI(),
-          name.getLocalName(),
-          name.getPrefix(),
-          name.getQualifiedName());
-    }
-
-    private static String getAttributeValueFrom(
-        Element element,
-        String uri,
-        String localName,
-        String prefix,
-        String qualifiedName) {
-
-        String nonzeroLengthUri =
-            (uri == null || uri.length() == 0) ? null : uri;
-
-        boolean mustUseGetAttributeNodeNS =  (nonzeroLengthUri != null);
-
-        if (mustUseGetAttributeNodeNS) {
-
-            if (!element.hasAttributeNS(uri, localName)) {
-                return null;
-            }
-
-            String attrValue =
-                element.getAttributeNS(nonzeroLengthUri, localName);
-
-            return attrValue;
-        }
-
-        Attr attribute = null;
-        attribute = element.getAttributeNode(qualifiedName);
-
-        return attribute == null ? null : attribute.getValue();
-    }
-
-    protected static Iterator getChildElementsFrom(final Element element) {
-        return new Iterator() {
-            Node next = element.getFirstChild();
-            Node nextNext = null;
-            Node last = null;
-
-            public boolean hasNext() {
-                if (next != null) {
-                    return true;
-                }
-                if (next == null && nextNext != null) {
-                    next = nextNext;
-                }
-
-                return next != null;
-            }
-
-            public Object next() {
-                if (hasNext()) {
-                    last = next;
-                    next = null;
-
-                    if ((element instanceof ElementImpl)
-                        && (last instanceof Element)) {
-                        last =
-                            ((ElementImpl) element).convertToSoapElement(
-                                (Element) last);
-                    }
-
-                    nextNext = last.getNextSibling();
-                    return last;
-                }
-                throw new NoSuchElementException();
-            }
-
-            public void remove() {
-                if (last == null) {
-                    throw new IllegalStateException();
-                }
-                Node target = last;
-                last = null;
-                element.removeChild(target);
-            }
-        };
-    }
-
-    public static String getQualifiedName(QName name) {
-        String prefix = name.getPrefix();
-        String localName = name.getLocalPart();
-        String qualifiedName = null;
-
-            if (prefix != null && prefix.length() > 0) {
-                qualifiedName = prefix + ":" + localName;
-            } else {
-                qualifiedName = localName;
-            }
-         return qualifiedName;
-    }
-
-    public static String getLocalPart(String qualifiedName) {
-        if (qualifiedName == null) {
-            // Log
-            throw new IllegalArgumentException("Cannot get local name for a \"null\" qualified name");
-        }
-
-        int index = qualifiedName.indexOf(':');
-        if (index < 0)
-            return qualifiedName;
-        else
-            return qualifiedName.substring(index + 1);
-    }
-
-    public static String getPrefix(String qualifiedName) {
-        if (qualifiedName == null) {
-            // Log
-            throw new IllegalArgumentException("Cannot get prefix for a  \"null\" qualified name");
-        }
-
-        int index = qualifiedName.indexOf(':');
-        if (index < 0)
-            return "";
-        else
-            return qualifiedName.substring(0, index);
-    }
-
-    protected boolean isNamespaceQualified(Name name) {
-        return !"".equals(name.getURI());
-    }
-
-    protected boolean isNamespaceQualified(QName name) {
-        return !"".equals(name.getNamespaceURI());
-    }
-
-    protected SOAPElement circumventBug5034339(SOAPElement element) {
-
-        Name elementName = element.getElementName();
-        if (!isNamespaceQualified(elementName)) {
-            String prefix = elementName.getPrefix();
-            String defaultNamespace = getNamespaceURI(prefix);
-            if (defaultNamespace != null) {
-                Name newElementName =
-                    NameImpl.create(
-                        elementName.getLocalName(),
-                        elementName.getPrefix(),
-                        defaultNamespace);
-                SOAPElement newElement = createElement(newElementName);
-                replaceChild(newElement, element);
-                return newElement;
-            }
-        }
-        return element;
-    }
-
-    //TODO: This is a temporary SAAJ workaround for optimizing XWS
-    // should be removed once the corresponding JAXP bug is fixed
-    // It appears the bug will be fixed in JAXP 1.4 (not by Appserver 9 timeframe)
-    public void setAttributeNS(
-        String namespaceURI,String qualifiedName, String value) {
-        int index = qualifiedName.indexOf(':');
-        String localName;
-        if (index < 0)
-            localName = qualifiedName;
-        else
-            localName = qualifiedName.substring(index + 1);
-
-        // Workaround for bug 6467808 - This needs to be fixed in JAXP
-
-        // Rolling back this fix, this is a wrong fix, infact its causing other regressions in JAXWS tck and
-        // other tests, because of this change the namespace declarations on soapenv:Fault element are never
-        // picked up. The fix for bug 6467808 should be in JAXP.
-//        if(elementQName.getLocalPart().equals("Fault") &&
-//                (SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE.equals(value) ||
-//                SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE.equals(value)))
-//            return;
-
-        super.setAttributeNS(namespaceURI,qualifiedName,value);
-        //String tmpLocalName = this.getLocalName();
-        String tmpURI = this.getNamespaceURI();
-        boolean isIDNS = false;
-        if( tmpURI != null && (tmpURI.equals(DSIG_NS) || tmpURI.equals(XENC_NS))){
-            isIDNS = true;
-        }
-        //No need to check for Signature/encryption element
-        //just check for namespace.
-        if(localName.equals("Id")){
-            if(namespaceURI == null || namespaceURI.equals("")){
-                setIdAttribute(localName,true);
-            }else if(isIDNS || WSU_NS.equals(namespaceURI)){
-                setIdAttributeNS(namespaceURI,localName,true);
-            }
-        }
-
-    }
-
-}