SOAPElementImpl.java |
/* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.axis.message; // $Id: SOAPElementImpl.java,v 1.1.2.2 2005/04/21 22:35:19 tdiesler Exp $ import org.jboss.axis.NotImplementedException; import org.jboss.axis.utils.DOM2Utils; import org.jboss.logging.Logger; import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NodeList; import org.w3c.dom.TypeInfo; import javax.xml.soap.Name; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import java.util.ArrayList; import java.util.Iterator; /** * An implemenation of the abstract SOAPElement. * <p/> * This class should not expose functionality that is not part of * {@link SOAPElement}. Client code should use <code>SOAPElement</code> whenever possible. * * @author Thomas Diesler (thomas.diesler@jboss.org) */ public class SOAPElementImpl extends NodeImpl implements SOAPElement { // provide logging private static Logger log = Logger.getLogger(SOAPElement.class.getName()); // The element private Element element; /** * Constructor used by the <code>SOAPElementFactory</code> */ public SOAPElementImpl(String localPart) { super(DOM2Utils.createElement(null, localPart)); element = (Element)domNode; } /** * Constructor used by the <code>SOAPElementFactory</code> */ public SOAPElementImpl(String localPart, String prefix, String namespace) { super(DOM2Utils.createElement(null, namespace, prefix, localPart)); element = (Element)domNode; } /** * Constructor used by the <code>SOAPElementFactory</code> */ public SOAPElementImpl(Name name) { super(DOM2Utils.createElement(null, name)); element = (Element)domNode; } // package protected contructors SOAPElementImpl(Element element) { super(element); this.element = element; } // javax.xml.soap.SOAPElement ************************************************************************************* /** * Adds an attribute with the specified name and value to this SOAPElement object. * * @param name a Name object with the name of the attribute * @param value a String giving the value of the attribute * @return the SOAPElement object into which the attribute was inserted * @throws javax.xml.soap.SOAPException if there is an error in creating the Attribute */ public SOAPElement addAttribute(Name name, String value) throws SOAPException { setAttributeNS(name.getURI(), name.getQualifiedName(), value); return this; } /** * Creates a new SOAPElement object initialized with the specified local name and adds the new element to this SOAPElement object. * * @param name a String giving the local name for the element * @return the new SOAPElement object that was created * @throws javax.xml.soap.SOAPException if there is an error in creating the SOAPElement object */ public SOAPElement addChildElement(String name) throws SOAPException { SOAPElement soapElement = new SOAPElementImpl(name); addChildElement(soapElement); return soapElement; } /** * Creates a new SOAPElement object initialized with the specified local name and prefix and adds the new element to this SOAPElement object. * * @param localName a String giving the local name for the new element * @param prefix a String giving the namespace prefix for the new element * @return the new SOAPElement object that was created * @throws javax.xml.soap.SOAPException if there is an error in creating the SOAPElement object */ public SOAPElement addChildElement(String localName, String prefix) throws SOAPException { SOAPElement soapElement = new SOAPElementImpl(localName, prefix, null); addChildElement(soapElement); return soapElement; } /** * Creates a new SOAPElement object initialized with the specified local name, prefix, and URI and adds the new element to this SOAPElement object. * * @param localName a String giving the local name for the new element * @param prefix a String giving the namespace prefix for the new element * @param uri a String giving the URI of the namespace to which the new element belongs * @return the new SOAPElement object that was created * @throws javax.xml.soap.SOAPException if there is an error in creating the SOAPElement object */ public SOAPElement addChildElement(String localName, String prefix, String uri) throws SOAPException { SOAPElement soapElement = new SOAPElementImpl(localName, prefix, uri); addChildElement(soapElement); return soapElement; } /** * Creates a new SOAPElement object initialized with the given Name object and adds the new element to this SOAPElement object. * * @param name a Name object with the XML name for the new element * @return the new SOAPElement object that was created * @throws javax.xml.soap.SOAPException if there is an error in creating the SOAPElement object */ public SOAPElement addChildElement(Name name) throws SOAPException { SOAPElement soapElement = new SOAPElementImpl(name); addChildElement(soapElement); return soapElement; } /** * Add a SOAPElement as a child of this SOAPElement instance. The SOAPElement is expected to be created by a SOAPElementFactory. * <p/> * Callers should not rely on the element instance being added as is into the XML tree. * Implementations could end up copying the content of the SOAPElement passed into an instance of a different SOAPElement * implementation. For instance if addChildElement() is called on a SOAPHeader, element will be copied into an instance of a SOAPHeaderElement. * <p/> * The fragment rooted in element is either added as a whole or not at all, if there was an error. * <p/> * The fragment rooted in element cannot contain elements named "Envelope", "Header" or "Body" and in the SOAP namespace. * Any namespace prefixes present in the fragment should be fully resolved using appropriate namespace declarations within the fragment itself. * * @param child the SOAPElement to be added as a new child * @return an instance representing the new SOAP element that was actually added to the tree. * @throws javax.xml.soap.SOAPException if there was an error in adding this element as a child */ public SOAPElement addChildElement(SOAPElement child) throws SOAPException { element.appendChild(child); return new SOAPElementAxisImpl(child); } /** * Adds a namespace declaration with the specified prefix and URI to this SOAPElement object. * * @param prefix a String giving the prefix of the namespace * @param uri a String giving the uri of the namespace * @return the SOAPElement object into which this namespace declaration was inserted. * @throws javax.xml.soap.SOAPException if there is an error in creating the namespace */ public SOAPElement addNamespaceDeclaration(String prefix, String uri) throws SOAPException { element.setAttribute("xmlns:" + prefix, uri); return this; } /** * Creates a new Text object initialized with the given String and adds it to this SOAPElement object. * * @param value a String object with the textual content to be added * @return the SOAPElement object into which the new Text object was inserted * @throws SOAPException if there is an error in creating the new Text object */ public SOAPElement addTextNode(String value) throws SOAPException { org.w3c.dom.Text domText = element.getOwnerDocument().createTextNode(value); javax.xml.soap.Text soapText = new TextImpl(domText); appendChild(soapText); return this; } /** * Returns an Iterator over all of the attribute Name objects in this SOAPElement object. * <p/> * The iterator can be used to get the attribute names, which can then be passed to the method getAttributeValue to * retrieve the value of each attribute. * * @return an iterator over the names of the attributes */ public Iterator getAllAttributes() { ArrayList list = new ArrayList(); NamedNodeMap nnm = getAttributes(); for (int i = 0; i < nnm.getLength(); i++) { org.w3c.dom.Node node = (org.w3c.dom.Node)nnm.item(i); String local = node.getLocalName(); String prefix = node.getPrefix(); String uri = node.getNamespaceURI(); list.add(new NameImpl(local, prefix, uri)); } return list.iterator(); } /** * Returns the value of the attribute with the specified name. * * @param name a Name object with the name of the attribute * @return a String giving the value of the specified attribute */ public String getAttributeValue(Name name) { throw new NotImplementedException(); } /** * Returns an Iterator over all the immediate child Nodes of this element. * <p/> * This includes javax.xml.soap.Text objects as well as SOAPElement objects. * Calling this method may cause child Element, SOAPElement and org.w3c.dom.Text nodes to be replaced by SOAPElement, * SOAPHeaderElement, SOAPBodyElement or javax.xml.soap.Text nodes as appropriate for the type of this parent node. * As a result the calling application must treat any existing references to these child nodes that have been obtained * through DOM APIs as invalid and either discard them or refresh them with the values returned by this Iterator. * This behavior can be avoided by calling the equivalent DOM APIs. See javax.xml.soap for more details. * * @return an iterator with the content of this SOAPElement object */ public Iterator getChildElements() { throw new NotImplementedException(); } /** * Returns an Iterator over all the immediate child Nodes of this element with the specified name. * <p/> * All of these children will be SOAPElement nodes. * Calling this method may cause child Element, SOAPElement and org.w3c.dom.Text nodes to be replaced by SOAPElement, * SOAPHeaderElement, SOAPBodyElement or javax.xml.soap.Text nodes as appropriate for the type of this parent node. * As a result the calling application must treat any existing references to these child nodes that have been obtained * through DOM APIs as invalid and either discard them or refresh them with the values returned by this Iterator. * This behavior can be avoided by calling the equivalent DOM APIs. See javax.xml.soap for more details. * * @param name a Name object with the name of the child elements to be returned * @return an Iterator object over all the elements in this SOAPElement object with the specified name */ public Iterator getChildElements(Name name) { throw new NotImplementedException(); } /** * Returns the name of this SOAPElement object. * * @return a Name object with the name of this SOAPElement object */ public Name getElementName() { throw new NotImplementedException(); } /** * Returns the encoding style for this SOAPElement object. * * @return a String giving the encoding style */ public String getEncodingStyle() { throw new NotImplementedException(); } /** * Returns an Iterator over the namespace prefix Strings declared by this element. * <p/> * The prefixes returned by this iterator can be passed to the method getNamespaceURI to retrieve the URI of each namespace. * * @return an iterator over the namespace prefixes in this SOAPElement object */ public Iterator getNamespacePrefixes() { throw new NotImplementedException(); } /** * Returns the URI of the namespace that has the given prefix. * * @param prefix a String giving the prefix of the namespace for which to search * @return a String with the uri of the namespace that has the given prefix */ public String getNamespaceURI(String prefix) { throw new NotImplementedException(); } /** * Returns an Iterator over the namespace prefix Strings visible to this element. * <p/> * The prefixes returned by this iterator can be passed to the method getNamespaceURI to retrieve the URI of each namespace. * * @return an iterator over the namespace prefixes are within scope of this SOAPElement object */ public Iterator getVisibleNamespacePrefixes() { throw new NotImplementedException(); } /** * Removes the attribute with the specified name. * * @param name the Name object with the name of the attribute to be removed * @return true if the attribute was removed successfully; false if it was not */ public boolean removeAttribute(Name name) { throw new NotImplementedException(); } /** * Detaches all children of this SOAPElement. * <p/> * This method is useful for rolling back the construction of partially completed SOAPHeaders and SOAPBodys in * preparation for sending a fault when an error condition is detected. * It is also useful for recycling portions of a document within a SOAP message. */ public void removeContents() { throw new NotImplementedException(); } /** * Removes the namespace declaration corresponding to the given prefix. * * @param prefix a String giving the prefix for which to search * @return true if the namespace declaration was removed successfully; false if it was not */ public boolean removeNamespaceDeclaration(String prefix) { throw new NotImplementedException(); } /** * Sets the encoding style for this SOAPElement object to one specified. * * @param encodingStyle a String giving the encoding style * @throws javax.xml.soap.SOAPException if there was a problem in the encoding style being set. */ public void setEncodingStyle(String encodingStyle) throws SOAPException { throw new NotImplementedException(); } // org.w3c.Element *********************************************************************************************** public String getTagName() { return element.getTagName(); } public void removeAttribute(String name) throws DOMException { element.removeAttribute(name); } public boolean hasAttribute(String name) { return element.hasAttribute(name); } public String getAttribute(String name) { return element.getAttribute(name); } public void removeAttributeNS(String namespaceURI, String localName) throws DOMException { element.removeAttributeNS(namespaceURI, localName); } public void setAttribute(String name, String value) throws DOMException { element.setAttribute(name, value); } public boolean hasAttributeNS(String namespaceURI, String localName) { return element.hasAttributeNS(namespaceURI, localName); } public Attr getAttributeNode(String name) { return element.getAttributeNode(name); } public Attr removeAttributeNode(Attr oldAttr) throws DOMException { return element.removeAttributeNode(oldAttr); } public Attr setAttributeNode(Attr newAttr) throws DOMException { return element.setAttributeNode(newAttr); } public Attr setAttributeNodeNS(Attr newAttr) throws DOMException { return element.setAttributeNodeNS(newAttr); } public NodeList getElementsByTagName(String name) { return element.getElementsByTagName(name); } public String getAttributeNS(String namespaceURI, String localName) { return element.getAttributeNS(namespaceURI, localName); } public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException { element.setAttributeNS(namespaceURI, qualifiedName, value); } public Attr getAttributeNodeNS(String namespaceURI, String localName) { return element.getAttributeNodeNS(namespaceURI, localName); } public NodeList getElementsByTagNameNS(String namespaceURI, String localName) { return element.getElementsByTagNameNS(namespaceURI, localName); } // DOM3-API start *************************************************************************************************** public TypeInfo getSchemaTypeInfo() { return null; } public void setIdAttribute(String name, boolean isId) throws DOMException { } public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException { } public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException { } // DOM3-API end ***************************************************************************************************** }
SOAPElementImpl.java |