You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ru...@apache.org on 2005/12/23 10:40:56 UTC
svn commit: r358784 [3/4] - in
/webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2:
src/org/apache/axis2/saaj2/ test-resources/ test/org/apache/axis2/saaj2/
Modified: webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPMessageImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPMessageImpl.java?rev=358784&r1=358783&r2=358784&view=diff
==============================================================================
--- webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPMessageImpl.java (original)
+++ webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPMessageImpl.java Fri Dec 23 01:40:17 2005
@@ -15,40 +15,373 @@
*/
package org.apache.axis2.saaj2;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
+import org.apache.axis2.om.OMOutputFormat;
+import org.apache.axis2.transport.http.HTTPConstants;
import javax.xml.soap.AttachmentPart;
-import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.MimeHeader;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPBody;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
public class SOAPMessageImpl extends SOAPMessage {
-
- private SOAPPartImpl mSOAPPart;
- private ArrayList attachments = new ArrayList();
- private java.util.Hashtable mProps = new java.util.Hashtable();
- private MimeHeadersEx headers;
-
-
-
-
- private void setup(Object initialContents, String contentType, String contentLocation,
- MimeHeaders mimeHeaders) throws SOAPException {
- if(contentType == null && mimeHeaders != null) {
+ private SOAPPart soapPart;
+ private Collection attachmentParts = new ArrayList();
+ private MimeHeadersEx mimeHeaders;
+
+ private Map props = new Hashtable();
+
+ public SOAPMessageImpl(SOAPEnvelopeImpl soapEnvelope) {
+ String contentType = null;
+ if (mimeHeaders != null) {
String contentTypes[] = mimeHeaders.getHeader("Content-Type");
- contentType = (contentTypes != null)? contentTypes[0] : null;
+ contentType = (contentTypes != null) ? contentTypes[0] : null;
}
- if(contentLocation == null && mimeHeaders != null) {
- String contentLocations[] = mimeHeaders.getHeader("Content-Location");
- contentLocation = (contentLocations != null)? contentLocations[0] : null;
+ setCharsetEncoding(contentType);
+
+ soapPart = new SOAPPartImpl(this, soapEnvelope);
+
+ this.mimeHeaders = new MimeHeadersEx();
+ }
+
+ public SOAPMessageImpl(InputStream inputstream,
+ javax.xml.soap.MimeHeaders mimeHeaders) throws SOAPException {
+ String contentType = null;
+ if (mimeHeaders != null) {
+ String contentTypes[] = mimeHeaders.getHeader("Content-Type");
+ contentType = (contentTypes != null) ? contentTypes[0] : null;
+ }
+
+ setCharsetEncoding(contentType);
+ soapPart = new SOAPPartImpl(this, inputstream);
+
+ this.mimeHeaders = (mimeHeaders == null) ?
+ new MimeHeadersEx() :
+ new MimeHeadersEx(mimeHeaders);
+ }
+
+ /**
+ * Retrieves a description of this <CODE>SOAPMessage</CODE>
+ * object's content.
+ *
+ * @return a <CODE>String</CODE> describing the content of this
+ * message or <CODE>null</CODE> if no description has been
+ * set
+ * @see #setContentDescription(java.lang.String) setContentDescription(java.lang.String)
+ */
+ public String getContentDescription() {
+ String values[] = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION);
+ if (values != null && values.length > 0) {
+ return values[0];
}
+ return null;
+ }
+ /**
+ * Sets the description of this <CODE>SOAPMessage</CODE>
+ * object's content with the given description.
+ *
+ * @param description a <CODE>String</CODE>
+ * describing the content of this message
+ * @see #getContentDescription() getContentDescription()
+ */
+ public void setContentDescription(String description) {
+ mimeHeaders.setHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION, description);
+ }
+
+ /**
+ * Gets the SOAP part of this <CODE>SOAPMessage</CODE> object.
+ * <p/>
+ * <p/>
+ * <P>If a <CODE>SOAPMessage</CODE> object contains one or
+ * more attachments, the SOAP Part must be the first MIME body
+ * part in the message.</P>
+ *
+ * @return the <CODE>SOAPPart</CODE> object for this <CODE>
+ * SOAPMessage</CODE> object
+ */
+ public SOAPPart getSOAPPart() {
+ return soapPart;
+ }
+
+ /**
+ * Removes all <CODE>AttachmentPart</CODE> objects that have
+ * been added to this <CODE>SOAPMessage</CODE> object.
+ * <p/>
+ * <P>This method does not touch the SOAP part.</P>
+ */
+ public void removeAllAttachments() {
+ attachmentParts.clear();
+ }
+
+ /**
+ * Gets a count of the number of attachments in this
+ * message. This count does not include the SOAP part.
+ *
+ * @return the number of <CODE>AttachmentPart</CODE> objects
+ * that are part of this <CODE>SOAPMessage</CODE>
+ * object
+ */
+ public int countAttachments() {
+ return attachmentParts.size();
+ }
+
+ /**
+ * Retrieves all the <CODE>AttachmentPart</CODE> objects
+ * that are part of this <CODE>SOAPMessage</CODE> object.
+ *
+ * @return an iterator over all the attachments in this
+ * message
+ */
+ public Iterator getAttachments() {
+ return attachmentParts.iterator();
+ }
+
+ /**
+ * Retrieves all the AttachmentPart objects that have header entries that match the specified
+ * headers.
+ * Note that a returned attachment could have headers in addition to those specified.
+ *
+ * @param headers a {@link javax.xml.soap.MimeHeaders}
+ * object containing the MIME headers for which to search
+ * @return an iterator over all attachments({@link javax.xml.soap.AttachmentPart})
+ * that have a header that matches one of the given headers
+ */
+ public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) {
+ Collection matchingAttachmentParts = new ArrayList();
+ Iterator iterator = getAttachments();
+ {
+ AttachmentPartImpl part;
+ while (iterator.hasNext()) {
+ part = (AttachmentPartImpl) iterator.next();
+ if (part.matches(headers)) {
+ matchingAttachmentParts.add(part);
+ }
+ }
+ }
+ return matchingAttachmentParts.iterator();
+ }
+
+ /**
+ * Adds the given <CODE>AttachmentPart</CODE> object to this
+ * <CODE>SOAPMessage</CODE> object. An <CODE>
+ * AttachmentPart</CODE> object must be created before it can be
+ * added to a message.
+ *
+ * @param attachmentPart an <CODE>
+ * AttachmentPart</CODE> object that is to become part of
+ * this <CODE>SOAPMessage</CODE> object
+ * @throws java.lang.IllegalArgumentException
+ *
+ */
+ public void addAttachmentPart(AttachmentPart attachmentPart) {
+ if (attachmentPart != null) {
+ attachmentParts.add(attachmentPart);
+ mimeHeaders.setHeader("Content-Type", "multipart/related");
+ }
+ }
+
+ /**
+ * Creates a new empty <CODE>AttachmentPart</CODE> object.
+ * Note that the method <CODE>addAttachmentPart</CODE> must be
+ * called with this new <CODE>AttachmentPart</CODE> object as
+ * the parameter in order for it to become an attachment to this
+ * <CODE>SOAPMessage</CODE> object.
+ *
+ * @return a new <CODE>AttachmentPart</CODE> object that can be
+ * populated and added to this <CODE>SOAPMessage</CODE>
+ * object
+ */
+ public AttachmentPart createAttachmentPart() {
+ return new AttachmentPartImpl();
+ }
+
+ /**
+ * Returns all the transport-specific MIME headers for this
+ * <CODE>SOAPMessage</CODE> object in a transport-independent
+ * fashion.
+ *
+ * @return a <CODE>MimeHeaders</CODE> object containing the
+ * <CODE>MimeHeader</CODE> objects
+ */
+ public javax.xml.soap.MimeHeaders getMimeHeaders() {
+ return mimeHeaders;
+ }
+
+ /**
+ * Updates this <CODE>SOAPMessage</CODE> object with all the
+ * changes that have been made to it. This method is called
+ * automatically when a message is sent or written to by the
+ * methods <CODE>ProviderConnection.send</CODE>, <CODE>
+ * SOAPConnection.call</CODE>, or <CODE>
+ * SOAPMessage.writeTo</CODE>. However, if changes are made to
+ * a message that was received or to one that has already been
+ * sent, the method <CODE>saveChanges</CODE> needs to be
+ * called explicitly in order to save the changes. The method
+ * <CODE>saveChanges</CODE> also generates any changes that
+ * can be read back (for example, a MessageId in profiles that
+ * support a message id). All MIME headers in a message that
+ * is created for sending purposes are guaranteed to have
+ * valid values only after <CODE>saveChanges</CODE> has been
+ * called.
+ * <p/>
+ * <P>In addition, this method marks the point at which the
+ * data from all constituent <CODE>AttachmentPart</CODE>
+ * objects are pulled into the message.</P>
+ *
+ * @throws SOAPException if there was a problem saving changes to this message.
+ */
+ public void saveChanges() throws SOAPException {
+ // TODO not sure of the implementation
+ throw new UnsupportedOperationException("TODO");
+ }
+
+ /**
+ * Indicates whether this <CODE>SOAPMessage</CODE> object
+ * has had the method {@link #saveChanges()} called on
+ * it.
+ *
+ * @return <CODE>true</CODE> if <CODE>saveChanges</CODE> has
+ * been called on this message at least once; <CODE>
+ * false</CODE> otherwise.
+ */
+ public boolean saveRequired() {
+ return false;
+ }
+
+ /**
+ * Writes this <CODE>SOAPMessage</CODE> object to the given
+ * output stream. The externalization format is as defined by
+ * the SOAP 1.1 with Attachments specification.
+ * <p/>
+ * <P>If there are no attachments, just an XML stream is
+ * written out. For those messages that have attachments,
+ * <CODE>writeTo</CODE> writes a MIME-encoded byte stream.</P>
+ *
+ * @param out the <CODE>OutputStream</CODE>
+ * object to which this <CODE>SOAPMessage</CODE> object will
+ * be written
+ * @throws SOAPException if there was a problem in externalizing this SOAP message
+ * @throws IOException if an I/O error occurs
+ */
+ public void writeTo(OutputStream out) throws SOAPException, IOException {
+ try {
+ OMOutputFormat format = new OMOutputFormat();
+ format.setCharSetEncoding((String) getProperty(CHARACTER_SET_ENCODING));
+ String writeXmlDecl = (String) getProperty(WRITE_XML_DECLARATION);
+ if (writeXmlDecl == null || writeXmlDecl.equals("false")) {
+
+ //SAAJ default case doesn't send XML decl
+ format.setIgnoreXMLDeclaration(true);
+ }
+
+ //the writeTo method forces the elements to be built!!!
+ ((SOAPEnvelopeImpl) soapPart.getEnvelope()).getOMEnvelope().serialize(out, format);
+ } catch (Exception e) {
+ throw new SOAPException(e);
+ }
+ }
+
+ /**
+ * Associates the specified value with the specified property. If there was
+ * already a value associated with this property, the old value is replaced.
+ * <p/>
+ * The valid property names include <code>WRITE_XML_DECLARATION</code> and
+ * <code>CHARACTER_SET_ENCODING</code>. All of these standard SAAJ
+ * properties are prefixed by "javax.xml.soap". Vendors may also add
+ * implementation specific properties. These properties must be prefixed
+ * with package names that are unique to the vendor.
+ * <p/>
+ * Setting the property <code>WRITE_XML_DECLARATION</code> to
+ * <code>"true"</code> will cause an XML Declaration to be written out at
+ * the start of the SOAP message. The default value of "false" suppresses
+ * this declaration.
+ * <p/>
+ * The property <code>CHARACTER_SET_ENCODING</code> defaults to the value
+ * <code>"utf-8"</code> which causes the SOAP message to be encoded using
+ * UTF-8. Setting <code>CHARACTER_SET_ENCODING</code> to
+ * <code>"utf-16"</code> causes the SOAP message to be encoded using UTF-16.
+ * <p/>
+ * Some implementations may allow encodings in addition to UTF-8 and UTF-16.
+ * Refer to your vendor's documentation for details.
+ *
+ * @param property the property with which the specified value is to be
+ * associated
+ * @param value the value
+ * to be associated with the specified property
+ */
+ public void setProperty(String property, Object value) {
+ props.put(property, value);
+ }
+
+ /**
+ * Retrieves value of the specified property.
+ *
+ * @param property the name of the property to retrieve
+ * @return the value of the property or <code>null</code> if no such
+ * property exists
+ * @throws SOAPException if the property name is not recognized
+ */
+ public Object getProperty(String property) throws SOAPException {
+ return props.get(property);
+ }
+
+ /**
+ * Gets the SOAP Header contained in this <code>SOAPMessage</code> object.
+ *
+ * @return the <code>SOAPHeader</code> object contained by this
+ * <code>SOAPMessage</code> object
+ * @throws javax.xml.soap.SOAPException if the SOAP Header does not exist or cannot be
+ * retrieved
+ */
+ public SOAPHeader getSOAPHeader() throws SOAPException {
+ return this.soapPart.getEnvelope().getHeader();
+ }
+
+ /**
+ * Gets the SOAP Body contained in this <code>SOAPMessage</code> object.
+ *
+ * @return the <code>SOAPBody</code> object contained by this
+ * <code>SOAPMessage</code> object
+ * @throws javax.xml.soap.SOAPException if the SOAP Body does not exist or cannot be
+ * retrieved
+ */
+ public SOAPBody getSOAPBody() throws SOAPException {
+ return this.soapPart.getEnvelope().getBody();
+ }
+
+ /**
+ * Retrieve the MIME Header names by providing the {@link javax.xml.soap.MimeHeaders} Object
+ *
+ * @param headers The {@link javax.xml.soap.MimeHeaders} Object
+ * @return MIME Header names corresponding to the <code>headers</code>
+ */
+ private String[] getMimeHeaderNames(final javax.xml.soap.MimeHeaders headers) {
+ Collection mimeHeaderNames = new ArrayList();
+ for (Iterator iterator = headers.getAllHeaders(); iterator.hasNext();) {
+ mimeHeaderNames.add(((MimeHeader) iterator.next()).getName());
+ }
+ return (String[]) mimeHeaderNames.toArray(new String[0]);
+ }
+
+ /**
+ * Set the character encoding based on the <code>contentType</code> parameter
+ *
+ * @param contentType
+ */
+ private void setCharsetEncoding(final String contentType) {
if (contentType != null) {
int delimiterIndex = contentType.lastIndexOf("charset");
if (delimiterIndex > 0) {
@@ -59,118 +392,10 @@
charset = charset.substring(1, charset.length());
}
if ((charset.endsWith("\"") || charset.endsWith("\'"))) {
- charset = charset.substring(0, charset.length()-1);
- }
- try {
- setProperty(SOAPMessage.CHARACTER_SET_ENCODING, charset);
- } catch (SOAPException e) {
+ charset = charset.substring(0, charset.length() - 1);
}
+ setProperty(SOAPMessage.CHARACTER_SET_ENCODING, charset);
}
}
-
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#getContentDescription()
- */
- public String getContentDescription() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#setContentDescription(java.lang.String)
- */
- public void setContentDescription(String description) {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#getSOAPPart()
- */
- public SOAPPart getSOAPPart() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#removeAllAttachments()
- */
- public void removeAllAttachments() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#countAttachments()
- */
- public int countAttachments() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#getAttachments()
- */
- public Iterator getAttachments() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#getAttachments(javax.xml.soap.MimeHeaders)
- */
- public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#addAttachmentPart(javax.xml.soap.AttachmentPart)
- */
- public void addAttachmentPart(AttachmentPart attachmentpart) {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#createAttachmentPart()
- */
- public AttachmentPart createAttachmentPart() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#getMimeHeaders()
- */
- public javax.xml.soap.MimeHeaders getMimeHeaders() {
- return this.headers;
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#saveChanges()
- */
- public void saveChanges() throws SOAPException {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#saveRequired()
- */
- public boolean saveRequired() {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPMessage#writeTo(java.io.OutputStream)
- */
- public void writeTo(OutputStream out) throws SOAPException, IOException {
- // TODO TODO
- throw new UnsupportedOperationException("TODO");
- }
-
+ }
}
Modified: webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPPartImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPPartImpl.java?rev=358784&r1=358783&r2=358784&view=diff
==============================================================================
--- webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPPartImpl.java (original)
+++ webservices/axis2/trunk/archive/java/scratch/ruchith_dims/saaj2/src/org/apache/axis2/saaj2/SOAPPartImpl.java Fri Dec 23 01:40:17 2005
@@ -15,19 +15,8 @@
*/
package org.apache.axis2.saaj2;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Iterator;
-
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPPart;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.transform.Source;
-
import org.apache.axis2.om.impl.dom.DocumentImpl;
-import org.apache.axis2.saaj.SOAPEnvelopeImpl;
-import org.apache.axis2.soap.impl.dom.factory.DOMSOAPFactory;
+import org.apache.axis2.soap.impl.dom.soap11.SOAP11Factory;
import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.util.SessionUtils;
@@ -47,416 +36,1064 @@
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.transform.Source;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Iterator;
+
public class SOAPPartImpl extends SOAPPart {
-
- Document document = new DocumentImpl();
- SOAPMessageImpl msgObject;
- MimeHeadersEx mimeHeaders = new MimeHeadersEx();
- private Object envelope;
-
-
- public SOAPPartImpl(SOAPMessageImpl parent, Object initialContents) throws SOAPException {
- setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
- SessionUtils.generateSessionId());
+
+ private Document document;
+ private SOAPMessage soapMessage;
+ private SOAPEnvelopeImpl envelope;
+ private MimeHeadersEx mimeHeaders = new MimeHeadersEx();
+
+
+ public SOAPPartImpl(SOAPMessageImpl parentSoapMsg,
+ SOAPEnvelopeImpl soapEnvelope) {
+
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, SessionUtils.generateSessionId());
setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, "text/xml");
-
- StAXSOAPModelBuilder stAXSOAPModelBuilder;
- msgObject = parent;
+ soapMessage = parentSoapMsg;
+ envelope = soapEnvelope;
+ this.document = soapEnvelope.getOwnerDocument();
+ }
+
+ public SOAPPartImpl(SOAPMessageImpl parentSoapMsg,
+ InputStream inputStream) throws SOAPException {
+
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, SessionUtils.generateSessionId());
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, "text/xml");
+
+ soapMessage = parentSoapMsg;
+
try {
- if (initialContents instanceof SOAPEnvelope) {
- ((SOAPEnvelopeImpl) initialContents).setOwnerDocument(this);
- envelope = initialContents;
- }else if (initialContents instanceof InputStream) {
- //XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader((InputStream)initialContents);
- InputStreamReader inr = new InputStreamReader(
- (InputStream) initialContents);
-
- stAXSOAPModelBuilder =
- new StAXSOAPModelBuilder(XMLInputFactory.newInstance()
- .createXMLStreamReader(inr), new DOMSOAPFactory(), null);
- org.apache.axis2.soap.SOAPEnvelope omEnv = stAXSOAPModelBuilder.getSOAPEnvelope();
- ///TODO ave to complete SOAP Env
- }
- } catch (Exception e) {
+ InputStreamReader isReader = new InputStreamReader(inputStream);
+
+ StAXSOAPModelBuilder builder =
+ new StAXSOAPModelBuilder(XMLInputFactory.newInstance().createXMLStreamReader(isReader),
+ new SOAP11Factory(),
+ null);
+ org.apache.axis2.soap.SOAPEnvelope soapEnvelope = builder.getSOAPEnvelope();
+ envelope = new SOAPEnvelopeImpl(soapEnvelope);
+ this.document = envelope.getOwnerDocument();
+ } catch (XMLStreamException e) {
+ e.printStackTrace();
throw new SOAPException(e);
}
- }
-
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getEnvelope()
- */
- public SOAPEnvelope getEnvelope() throws SOAPException {
- return (SOAPEnvelope)this.envelope;
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#removeMimeHeader(java.lang.String)
- */
- public void removeMimeHeader(String header) {
- this.mimeHeaders.removeHeader(header);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#removeAllMimeHeaders()
- */
- public void removeAllMimeHeaders() {
- this.mimeHeaders.removeAllHeaders();
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getMimeHeader(java.lang.String)
- */
- public String[] getMimeHeader(String name) {
- return this.mimeHeaders.getHeader(name);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#setMimeHeader(java.lang.String, java.lang.String)
- */
- public void setMimeHeader(String name, String value) {
- this.mimeHeaders.setHeader(name, value);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#addMimeHeader(java.lang.String, java.lang.String)
- */
- public void addMimeHeader(String header, String value) {
- this.mimeHeaders.addHeader(header, value);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getAllMimeHeaders()
- */
- public Iterator getAllMimeHeaders() {
- return this.mimeHeaders.getAllHeaders();
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getMatchingMimeHeaders(java.lang.String[])
- */
- public Iterator getMatchingMimeHeaders(String[] names) {
- return this.mimeHeaders.getMatchingHeaders(names);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getNonMatchingMimeHeaders(java.lang.String[])
- */
- public Iterator getNonMatchingMimeHeaders(String[] names) {
- return this.mimeHeaders.getNonMatchingHeaders(names);
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#setContent(javax.xml.transform.Source)
- */
- public void setContent(Source source) throws SOAPException {
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getContent()
- */
- public Source getContent() throws SOAPException {
- throw new UnsupportedOperationException("TODO");
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getDoctype()
- */
- public DocumentType getDoctype() {
- return this.document.getDoctype();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getImplementation()
- */
- public DOMImplementation getImplementation() {
- return this.document.getImplementation();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getDocumentElement()
- */
- public Element getDocumentElement() {
- return this.document.getDocumentElement();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createElement(java.lang.String)
- */
- public Element createElement(String arg0) throws DOMException {
- return this.document.createElement(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createDocumentFragment()
- */
- public DocumentFragment createDocumentFragment() {
- return this.document.createDocumentFragment();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createTextNode(java.lang.String)
- */
- public Text createTextNode(String arg0) {
- return this.document.createTextNode(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createComment(java.lang.String)
- */
- public Comment createComment(String arg0) {
- return this.document.createComment(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createCDATASection(java.lang.String)
- */
- public CDATASection createCDATASection(String arg0) throws DOMException {
- return this.document.createCDATASection(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createProcessingInstruction(java.lang.String, java.lang.String)
- */
- public ProcessingInstruction createProcessingInstruction(String arg0, String arg1) throws DOMException {
- return this.document.createProcessingInstruction(arg0,arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createAttribute(java.lang.String)
- */
- public Attr createAttribute(String arg0) throws DOMException {
- return this.document.createAttribute(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createEntityReference(java.lang.String)
- */
- public EntityReference createEntityReference(String arg0) throws DOMException {
- return this.document.createEntityReference(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getElementsByTagName(java.lang.String)
- */
- public NodeList getElementsByTagName(String arg0) {
- return this.document.getElementsByTagName(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#importNode(org.w3c.dom.Node, boolean)
- */
- public Node importNode(Node arg0, boolean arg1) throws DOMException {
- return this.document.importNode(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createElementNS(java.lang.String, java.lang.String)
- */
- public Element createElementNS(String arg0, String arg1) throws DOMException {
- return this.document.createElementNS(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#createAttributeNS(java.lang.String, java.lang.String)
- */
- public Attr createAttributeNS(String arg0, String arg1) throws DOMException {
- return this.document.createAttributeNS(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getElementsByTagNameNS(java.lang.String, java.lang.String)
- */
- public NodeList getElementsByTagNameNS(String arg0, String arg1) {
- return this.document.getElementsByTagNameNS(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Document#getElementById(java.lang.String)
- */
- public Element getElementById(String arg0) {
- return this.document.getElementById(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getNodeName()
- */
- public String getNodeName() {
- return this.document.getNodeName();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getNodeValue()
- */
- public String getNodeValue() throws DOMException {
- return this.document.getNodeValue();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#setNodeValue(java.lang.String)
- */
- public void setNodeValue(String arg0) throws DOMException {
- this.document.setNodeValue(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getNodeType()
- */
- public short getNodeType() {
- return this.document.getNodeType();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getParentNode()
- */
- public Node getParentNode() {
- return this.getParentNode();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getChildNodes()
- */
- public NodeList getChildNodes() {
- return this.document.getChildNodes();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getFirstChild()
- */
- public Node getFirstChild() {
- return this.document.getFirstChild();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getLastChild()
- */
- public Node getLastChild() {
- return this.document.getLastChild();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getPreviousSibling()
- */
- public Node getPreviousSibling() {
- return this.document.getPreviousSibling();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getNextSibling()
- */
- public Node getNextSibling() {
- return this.document.getNextSibling();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getAttributes()
- */
- public NamedNodeMap getAttributes() {
- return this.document.getAttributes();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getOwnerDocument()
- */
- public Document getOwnerDocument() {
- return this.document.getOwnerDocument();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#insertBefore(org.w3c.dom.Node, org.w3c.dom.Node)
- */
- public Node insertBefore(Node arg0, Node arg1) throws DOMException {
- return this.document.insertBefore(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#replaceChild(org.w3c.dom.Node, org.w3c.dom.Node)
- */
- public Node replaceChild(Node arg0, Node arg1) throws DOMException {
- return this.document.replaceChild(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#removeChild(org.w3c.dom.Node)
- */
- public Node removeChild(Node arg0) throws DOMException {
- return this.document.removeChild(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#appendChild(org.w3c.dom.Node)
- */
- public Node appendChild(Node arg0) throws DOMException {
- return this.document.appendChild(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#hasChildNodes()
- */
- public boolean hasChildNodes() {
- return this.document.hasChildNodes();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#cloneNode(boolean)
- */
- public Node cloneNode(boolean arg0) {
- return this.document.cloneNode(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#normalize()
- */
- public void normalize() {
- this.document.normalize();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#isSupported(java.lang.String, java.lang.String)
- */
- public boolean isSupported(String arg0, String arg1) {
- return this.document.isSupported(arg0, arg1);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getNamespaceURI()
- */
- public String getNamespaceURI() {
- return this.document.getNamespaceURI();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getPrefix()
- */
- public String getPrefix() {
- return this.document.getPrefix();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#setPrefix(java.lang.String)
- */
- public void setPrefix(String arg0) throws DOMException {
- this.document.setPrefix(arg0);
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#getLocalName()
- */
- public String getLocalName() {
- return this.document.getLocalName();
- }
-
- /* (non-Javadoc)
- * @see org.w3c.dom.Node#hasAttributes()
- */
- public boolean hasAttributes() {
- return this.document.hasAttributes();
- }
-
- protected void setMessage(SOAPMessageImpl message) {
- this.msgObject = message;
- }
+ }
+ /**
+ * Obtain the SOAPMessage
+ *
+ * @return the related SOAPMessage
+ */
+ public SOAPMessage getSoapMessage() {
+ return soapMessage;
+ }
+
+ /**
+ * Gets the <CODE>SOAPEnvelope</CODE> object associated with
+ * this <CODE>SOAPPart</CODE> object. Once the SOAP envelope is
+ * obtained, it can be used to get its contents.
+ *
+ * @return the <CODE>SOAPEnvelope</CODE> object for this <CODE>
+ * SOAPPart</CODE> object
+ * @throws SOAPException if there is a SOAP error
+ */
+ public SOAPEnvelope getEnvelope() throws SOAPException {
+ return envelope;
+ }
+
+ /**
+ * Removes all MIME headers that match the given name.
+ *
+ * @param header a <CODE>String</CODE> giving
+ * the name of the MIME header(s) to be removed
+ */
+ public void removeMimeHeader(String header) {
+ mimeHeaders.removeHeader(header);
+ }
+
+ /**
+ * Removes all the <CODE>MimeHeader</CODE> objects for this
+ * <CODE>SOAPEnvelope</CODE> object.
+ */
+ public void removeAllMimeHeaders() {
+ mimeHeaders.removeAllHeaders();
+ }
+
+ /**
+ * Gets all the values of the <CODE>MimeHeader</CODE> object
+ * in this <CODE>SOAPPart</CODE> object that is identified by
+ * the given <CODE>String</CODE>.
+ *
+ * @param name the name of the header; example:
+ * "Content-Type"
+ * @return a <CODE>String</CODE> array giving all the values for
+ * the specified header
+ * @see #setMimeHeader(java.lang.String, java.lang.String) setMimeHeader(java.lang.String, java.lang.String)
+ */
+ public String[] getMimeHeader(String name) {
+ return mimeHeaders.getHeader(name);
+ }
+
+ /**
+ * Changes the first header entry that matches the given
+ * header name so that its value is the given value, adding a
+ * new header with the given name and value if no existing
+ * header is a match. If there is a match, this method clears
+ * all existing values for the first header that matches and
+ * sets the given value instead. If more than one header has
+ * the given name, this method removes all of the matching
+ * headers after the first one.
+ * <p/>
+ * <P>Note that RFC822 headers can contain only US-ASCII
+ * characters.</P>
+ *
+ * @param name a <CODE>String</CODE> giving the
+ * header name for which to search
+ * @param value a <CODE>String</CODE> giving the
+ * value to be set. This value will be substituted for the
+ * current value(s) of the first header that is a match if
+ * there is one. If there is no match, this value will be
+ * the value for a new <CODE>MimeHeader</CODE> object.
+ * @throws java.lang.IllegalArgumentException
+ * if
+ * there was a problem with the specified mime header name
+ * or value
+ * @throws java.lang.IllegalArgumentException
+ * if there was a problem with the specified mime header name or value
+ * @see #getMimeHeader(java.lang.String) getMimeHeader(java.lang.String)
+ */
+ public void setMimeHeader(String name, String value) {
+ mimeHeaders.setHeader(name, value);
+ }
+
+ /**
+ * Creates a <CODE>MimeHeader</CODE> object with the specified
+ * name and value and adds it to this <CODE>SOAPPart</CODE>
+ * object. If a <CODE>MimeHeader</CODE> with the specified
+ * name already exists, this method adds the specified value
+ * to the already existing value(s).
+ * <p/>
+ * <P>Note that RFC822 headers can contain only US-ASCII
+ * characters.</P>
+ *
+ * @param header a <CODE>String</CODE> giving the
+ * header name
+ * @param value a <CODE>String</CODE> giving the
+ * value to be set or added
+ * @throws IllegalArgumentException if
+ * there was a problem with the specified mime header name
+ * or value
+ */
+ public void addMimeHeader(String header, String value) {
+ mimeHeaders.addHeader(header, value);
+ }
+
+ /**
+ * Retrieves all the headers for this <CODE>SOAPPart</CODE>
+ * object as an iterator over the <CODE>MimeHeader</CODE>
+ * objects.
+ *
+ * @return an <CODE>Iterator</CODE> object with all of the Mime
+ * headers for this <CODE>SOAPPart</CODE> object
+ */
+ public Iterator getAllMimeHeaders() {
+ return mimeHeaders.getAllHeaders();
+ }
+
+ /**
+ * Retrieves all <CODE>MimeHeader</CODE> objects that match
+ * a name in the given array.
+ *
+ * @param names a <CODE>String</CODE> array with
+ * the name(s) of the MIME headers to be returned
+ * @return all of the MIME headers that match one of the names
+ * in the given array, returned as an <CODE>Iterator</CODE>
+ * object
+ */
+ public Iterator getMatchingMimeHeaders(String[] names) {
+ return mimeHeaders.getMatchingHeaders(names);
+ }
+
+ /**
+ * Retrieves all <CODE>MimeHeader</CODE> objects whose name
+ * does not match a name in the given array.
+ *
+ * @param names a <CODE>String</CODE> array with
+ * the name(s) of the MIME headers not to be returned
+ * @return all of the MIME headers in this <CODE>SOAPPart</CODE>
+ * object except those that match one of the names in the
+ * given array. The nonmatching MIME headers are returned as
+ * an <CODE>Iterator</CODE> object.
+ */
+ public Iterator getNonMatchingMimeHeaders(String[] names) {
+ return mimeHeaders.getNonMatchingHeaders(names);
+ }
+
+ /**
+ * Sets the content of the <CODE>SOAPEnvelope</CODE> object
+ * with the data from the given <CODE>Source</CODE> object.
+ *
+ * @param source javax.xml.transform.Source</CODE> object with the data to
+ * be set
+ * @throws SOAPException if there is a problem in
+ * setting the source
+ * @see #getContent() getContent()
+ */
+ public void setContent(Source source) throws SOAPException {
+ //TODO: implementation
+ throw new UnsupportedOperationException("TODO");
+ }
+
+ /**
+ * Returns the content of the SOAPEnvelope as a JAXP <CODE>
+ * Source</CODE> object.
+ *
+ * @return the content as a <CODE>
+ * javax.xml.transform.Source</CODE> object
+ * @throws SOAPException if the implementation cannot
+ * convert the specified <CODE>Source</CODE> object
+ * @see #setContent(javax.xml.transform.Source) setContent(javax.xml.transform.Source)
+ */
+ public Source getContent() throws SOAPException {
+ //TODO: implementation
+ throw new UnsupportedOperationException("TODO");
+ }
+
+ /**
+ * The Document Type Declaration (see <code>DocumentType</code>)
+ * associated with this document. For HTML documents as well as XML
+ * documents without a document type declaration this returns
+ * <code>null</code>. The DOM Level 2 does not support editing the
+ * Document Type Declaration. <code>docType</code> cannot be altered in
+ * any way, including through the use of methods inherited from the
+ * <code>Node</code> interface, such as <code>insertNode</code> or
+ * <code>removeNode</code>.
+ */
+ public DocumentType getDoctype() {
+ return document.getDoctype();
+ }
+
+ /**
+ * The <code>DOMImplementation</code> object that handles this document. A
+ * DOM application may use objects from multiple implementations.
+ */
+ public DOMImplementation getImplementation() {
+ return document.getImplementation();
+ }
+
+ /**
+ * This is a convenience attribute that allows direct access to the child
+ * node that is the root element of the document. For HTML documents,
+ * this is the element with the tagName "HTML".
+ */
+ public Element getDocumentElement() {
+ return document.getDocumentElement();
+ }
+
+ /**
+ * Creates an element of the type specified. Note that the instance
+ * returned implements the <code>Element</code> interface, so attributes
+ * can be specified directly on the returned object.
+ * <br>In addition, if there are known attributes with default values,
+ * <code>Attr</code> nodes representing them are automatically created
+ * and attached to the element.
+ * <br>To create an element with a qualified name and namespace URI, use
+ * the <code>createElementNS</code> method.
+ *
+ * @param tagName The name of the element type to instantiate. For XML,
+ * this is case-sensitive. For HTML, the <code>tagName</code>
+ * parameter may be provided in any case, but it must be mapped to the
+ * canonical uppercase form by the DOM implementation.
+ * @return A new <code>Element</code> object with the
+ * <code>nodeName</code> attribute set to <code>tagName</code>, and
+ * <code>localName</code>, <code>prefix</code>, and
+ * <code>namespaceURI</code> set to <code>null</code>.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * illegal character.
+ */
+ public Element createElement(String tagName) throws DOMException {
+ return document.createElement(tagName);
+ }
+
+ /**
+ * Creates an empty <code>DocumentFragment</code> object.
+ *
+ * @return A new <code>DocumentFragment</code>.
+ */
+ public DocumentFragment createDocumentFragment() {
+ return document.createDocumentFragment();
+ }
+
+ /**
+ * Creates a <code>Text</code> node given the specified string.
+ *
+ * @param data The data for the node.
+ * @return The new <code>Text</code> object.
+ */
+ public Text createTextNode(String data) {
+ return document.createTextNode(data);
+ }
+
+ /**
+ * Creates a <code>CDATASection</code> node whose value is the specified
+ * string.
+ *
+ * @param data The data for the <code>CDATASection</code> contents.
+ * @return The new <code>CDATASection</code> object.
+ * @throws DOMException NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+ */
+ public Comment createComment(String data) {
+ return document.createComment(data);
+ }
+
+ /**
+ * Creates a <code>CDATASection</code> node whose value is the specified
+ * string.
+ *
+ * @param data The data for the <code>CDATASection</code> contents.
+ * @return The new <code>CDATASection</code> object.
+ * @throws DOMException NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+ */
+ public CDATASection createCDATASection(String data) throws DOMException {
+ return document.createCDATASection(data);
+ }
+
+ /**
+ * Creates a <code>ProcessingInstruction</code> node given the specified
+ * name and data strings.
+ *
+ * @param target The target part of the processing instruction.
+ * @param data The data for the node.
+ * @return The new <code>ProcessingInstruction</code> object.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified target contains an
+ * illegal character.
+ * <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+ */
+ public ProcessingInstruction createProcessingInstruction(String target, String data) throws DOMException {
+ return document.createProcessingInstruction(target, data);
+ }
+
+ /**
+ * Creates an <code>Attr</code> of the given name. Note that the
+ * <code>Attr</code> instance can then be set on an <code>Element</code>
+ * using the <code>setAttributeNode</code> method.
+ * <br>To create an attribute with a qualified name and namespace URI, use
+ * the <code>createAttributeNS</code> method.
+ *
+ * @param name The name of the attribute.
+ * @return A new <code>Attr</code> object with the <code>nodeName</code>
+ * attribute set to <code>name</code>, and <code>localName</code>,
+ * <code>prefix</code>, and <code>namespaceURI</code> set to
+ * <code>null</code>. The value of the attribute is the empty string.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * illegal character.
+ */
+ public Attr createAttribute(String name) throws DOMException {
+ return document.createAttribute(name);
+ }
+
+ /**
+ * Creates an <code>EntityReference</code> object. In addition, if the
+ * referenced entity is known, the child list of the
+ * <code>EntityReference</code> node is made the same as that of the
+ * corresponding <code>Entity</code> node.If any descendant of the
+ * <code>Entity</code> node has an unbound namespace prefix, the
+ * corresponding descendant of the created <code>EntityReference</code>
+ * node is also unbound; (its <code>namespaceURI</code> is
+ * <code>null</code>). The DOM Level 2 does not support any mechanism to
+ * resolve namespace prefixes.
+ *
+ * @param name The name of the entity to reference.
+ * @return The new <code>EntityReference</code> object.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * illegal character.
+ * <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
+ */
+ public EntityReference createEntityReference(String name) throws DOMException {
+ return document.createEntityReference(name);
+ }
+
+ /**
+ * Returns a <code>NodeList</code> of all the <code>Elements</code> with a
+ * given tag name in the order in which they are encountered in a
+ * preorder traversal of the <code>Document</code> tree.
+ *
+ * @param tagname The name of the tag to match on. The special value "*"
+ * matches all tags.
+ * @return A new <code>NodeList</code> object containing all the matched
+ * <code>Elements</code>.
+ */
+ public NodeList getElementsByTagName(String tagname) {
+ return document.getElementsByTagName(tagname);
+ }
+
+ /**
+ * Imports a node from another document to this document. The returned
+ * node has no parent; (<code>parentNode</code> is <code>null</code>).
+ * The source node is not altered or removed from the original document;
+ * this method creates a new copy of the source node.
+ * <br>For all nodes, importing a node creates a node object owned by the
+ * importing document, with attribute values identical to the source
+ * node's <code>nodeName</code> and <code>nodeType</code>, plus the
+ * attributes related to namespaces (<code>prefix</code>,
+ * <code>localName</code>, and <code>namespaceURI</code>). As in the
+ * <code>cloneNode</code> operation on a <code>Node</code>, the source
+ * node is not altered.
+ * <br>Additional information is copied as appropriate to the
+ * <code>nodeType</code>, attempting to mirror the behavior expected if
+ * a fragment of XML or HTML source was copied from one document to
+ * another, recognizing that the two documents may have different DTDs
+ * in the XML case. The following list describes the specifics for each
+ * type of node.
+ * <dl>
+ * <dt>ATTRIBUTE_NODE</dt>
+ * <dd>The <code>ownerElement</code> attribute
+ * is set to <code>null</code> and the <code>specified</code> flag is
+ * set to <code>true</code> on the generated <code>Attr</code>. The
+ * descendants of the source <code>Attr</code> are recursively imported
+ * and the resulting nodes reassembled to form the corresponding subtree.
+ * Note that the <code>deep</code> parameter has no effect on
+ * <code>Attr</code> nodes; they always carry their children with them
+ * when imported.</dd>
+ * <dt>DOCUMENT_FRAGMENT_NODE</dt>
+ * <dd>If the <code>deep</code> option
+ * was set to <code>true</code>, the descendants of the source element
+ * are recursively imported and the resulting nodes reassembled to form
+ * the corresponding subtree. Otherwise, this simply generates an empty
+ * <code>DocumentFragment</code>.</dd>
+ * <dt>DOCUMENT_NODE</dt>
+ * <dd><code>Document</code>
+ * nodes cannot be imported.</dd>
+ * <dt>DOCUMENT_TYPE_NODE</dt>
+ * <dd><code>DocumentType</code>
+ * nodes cannot be imported.</dd>
+ * <dt>ELEMENT_NODE</dt>
+ * <dd>Specified attribute nodes of the
+ * source element are imported, and the generated <code>Attr</code>
+ * nodes are attached to the generated <code>Element</code>. Default
+ * attributes are not copied, though if the document being imported into
+ * defines default attributes for this element name, those are assigned.
+ * If the <code>importNode</code> <code>deep</code> parameter was set to
+ * <code>true</code>, the descendants of the source element are
+ * recursively imported and the resulting nodes reassembled to form the
+ * corresponding subtree.</dd>
+ * <dt>ENTITY_NODE</dt>
+ * <dd><code>Entity</code> nodes can be
+ * imported, however in the current release of the DOM the
+ * <code>DocumentType</code> is readonly. Ability to add these imported
+ * nodes to a <code>DocumentType</code> will be considered for addition
+ * to a future release of the DOM.On import, the <code>publicId</code>,
+ * <code>systemId</code>, and <code>notationName</code> attributes are
+ * copied. If a <code>deep</code> import is requested, the descendants
+ * of the the source <code>Entity</code> are recursively imported and
+ * the resulting nodes reassembled to form the corresponding subtree.</dd>
+ * <dt>
+ * ENTITY_REFERENCE_NODE</dt>
+ * <dd>Only the <code>EntityReference</code> itself is
+ * copied, even if a <code>deep</code> import is requested, since the
+ * source and destination documents might have defined the entity
+ * differently. If the document being imported into provides a
+ * definition for this entity name, its value is assigned.</dd>
+ * <dt>NOTATION_NODE</dt>
+ * <dd>
+ * <code>Notation</code> nodes can be imported, however in the current
+ * release of the DOM the <code>DocumentType</code> is readonly. Ability
+ * to add these imported nodes to a <code>DocumentType</code> will be
+ * considered for addition to a future release of the DOM.On import, the
+ * <code>publicId</code> and <code>systemId</code> attributes are copied.
+ * Note that the <code>deep</code> parameter has no effect on
+ * <code>Notation</code> nodes since they never have any children.</dd>
+ * <dt>
+ * PROCESSING_INSTRUCTION_NODE</dt>
+ * <dd>The imported node copies its
+ * <code>target</code> and <code>data</code> values from those of the
+ * source node.</dd>
+ * <dt>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE</dt>
+ * <dd>These three
+ * types of nodes inheriting from <code>CharacterData</code> copy their
+ * <code>data</code> and <code>length</code> attributes from those of
+ * the source node.</dd>
+ * </dl>
+ *
+ * @param importedNode The node to import.
+ * @param deep If <code>true</code>, recursively import the subtree under
+ * the specified node; if <code>false</code>, import only the node
+ * itself, as explained above. This has no effect on <code>Attr</code>
+ * , <code>EntityReference</code>, and <code>Notation</code> nodes.
+ * @return The imported node that belongs to this <code>Document</code>.
+ * @throws DOMException NOT_SUPPORTED_ERR: Raised if the type of node being imported is not
+ * supported.
+ * @since DOM Level 2
+ */
+ public Node importNode(Node importedNode, boolean deep) throws DOMException {
+ return document.importNode(importedNode, deep);
+ }
+
+ /**
+ * Creates an element of the given qualified name and namespace URI.
+ *
+ * @param namespaceURI The namespace URI of the element to create.
+ * @param qualifiedName The qualified name of the element type to
+ * instantiate.
+ * @return A new <code>Element</code> object with the following
+ * attributes:
+ * <table border='1' summary="Description of attributes and values for the new Element object">
+ * <tr>
+ * <th>Attribute</th>
+ * <th>Value</th>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.nodeName</code></td>
+ * <td valign='top'>
+ * <code>qualifiedName</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.namespaceURI</code></td>
+ * <td valign='top'>
+ * <code>namespaceURI</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.prefix</code></td>
+ * <td valign='top'>prefix, extracted
+ * from <code>qualifiedName</code>, or <code>null</code> if there is
+ * no prefix</td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.localName</code></td>
+ * <td valign='top'>local name, extracted from
+ * <code>qualifiedName</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Element.tagName</code></td>
+ * <td valign='top'>
+ * <code>qualifiedName</code></td>
+ * </tr>
+ * </table>
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified qualified name
+ * contains an illegal character, per the XML 1.0 specification .
+ * <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is
+ * malformed per the Namespaces in XML specification, if the
+ * <code>qualifiedName</code> has a prefix and the
+ * <code>namespaceURI</code> is <code>null</code>, or if the
+ * <code>qualifiedName</code> has a prefix that is "xml" and the
+ * <code>namespaceURI</code> is different from "
+ * http://www.w3.org/XML/1998/namespace" .
+ * <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not
+ * support the <code>"XML"</code> feature, since namespaces were
+ * defined by XML.
+ * @since DOM Level 2
+ */
+ public Element createElementNS(String namespaceURI, String qualifiedName) throws DOMException {
+ return document.createElementNS(namespaceURI, qualifiedName);
+ }
+
+ /**
+ * Creates an attribute of the given qualified name and namespace URI.
+ *
+ * @param namespaceURI The namespace URI of the attribute to create.
+ * @param qualifiedName The qualified name of the attribute to
+ * instantiate.
+ * @return A new <code>Attr</code> object with the following attributes:
+ * <table border='1' summary="Description of attributes and values for the new Attr object">
+ * <tr>
+ * <th>
+ * Attribute</th>
+ * <th>Value</th>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.nodeName</code></td>
+ * <td valign='top'>qualifiedName</td>
+ * </tr>
+ * <tr>
+ * <td valign='top'>
+ * <code>Node.namespaceURI</code></td>
+ * <td valign='top'><code>namespaceURI</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'>
+ * <code>Node.prefix</code></td>
+ * <td valign='top'>prefix, extracted from
+ * <code>qualifiedName</code>, or <code>null</code> if there is no
+ * prefix</td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.localName</code></td>
+ * <td valign='top'>local name, extracted from
+ * <code>qualifiedName</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Attr.name</code></td>
+ * <td valign='top'>
+ * <code>qualifiedName</code></td>
+ * </tr>
+ * <tr>
+ * <td valign='top'><code>Node.nodeValue</code></td>
+ * <td valign='top'>the empty
+ * string</td>
+ * </tr>
+ * </table>
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified qualified name
+ * contains an illegal character, per the XML 1.0 specification .
+ * <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is
+ * malformed per the Namespaces in XML specification, if the
+ * <code>qualifiedName</code> has a prefix and the
+ * <code>namespaceURI</code> is <code>null</code>, if the
+ * <code>qualifiedName</code> has a prefix that is "xml" and the
+ * <code>namespaceURI</code> is different from "
+ * http://www.w3.org/XML/1998/namespace", or if the
+ * <code>qualifiedName</code>, or its prefix, is "xmlns" and the
+ * <code>namespaceURI</code> is different from "
+ * http://www.w3.org/2000/xmlns/".
+ * <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not
+ * support the <code>"XML"</code> feature, since namespaces were
+ * defined by XML.
+ * @since DOM Level 2
+ */
+ public Attr createAttributeNS(String namespaceURI, String qualifiedName) throws DOMException {
+ return document.createAttributeNS(namespaceURI, qualifiedName);
+ }
+
+ /**
+ * Returns a <code>NodeList</code> of all the <code>Elements</code> with a
+ * given local name and namespace URI in the order in which they are
+ * encountered in a preorder traversal of the <code>Document</code> tree.
+ *
+ * @param namespaceURI The namespace URI of the elements to match on. The
+ * special value "*" matches all namespaces.
+ * @param localName The local name of the elements to match on. The
+ * special value "*" matches all local names.
+ * @return A new <code>NodeList</code> object containing all the matched
+ * <code>Elements</code>.
+ * @since DOM Level 2
+ */
+ public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
+ return document.getElementsByTagNameNS(namespaceURI, localName);
+ }
+
+ /**
+ * Returns the <code>Element</code> whose <code>ID</code> is given by
+ * <code>elementId</code>. If no such element exists, returns
+ * <code>null</code>. Behavior is not defined if more than one element
+ * has this <code>ID</code>. The DOM implementation must have
+ * information that says which attributes are of type ID. Attributes
+ * with the name "ID" are not of type ID unless so defined.
+ * Implementations that do not know whether attributes are of type ID or
+ * not are expected to return <code>null</code>.
+ *
+ * @param elementId The unique <code>id</code> value for an element.
+ * @return The matching element.
+ * @since DOM Level 2
+ */
+ public Element getElementById(String elementId) {
+ return document.getElementById(elementId);
+ }
+
+ /**
+ * The name of this node, depending on its type; see the table above.
+ */
+ public String getNodeName() {
+ return document.getNodeName();
+ }
+
+ /**
+ * The value of this node, depending on its type; see the table above.
+ * When it is defined to be <code>null</code>, setting it has no effect.
+ *
+ * @throws DOMException NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+ * @throws DOMException DOMSTRING_SIZE_ERR: Raised when it would return more characters than
+ * fit in a <code>DOMString</code> variable on the implementation
+ * platform.
+ */
+ public String getNodeValue() throws DOMException {
+ return document.getNodeValue();
+ }
+
+ /**
+ * The value of this node, depending on its type; see the table above.
+ * When it is defined to be <code>null</code>, setting it has no effect.
+ *
+ * @throws DOMException NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
+ * @throws DOMException DOMSTRING_SIZE_ERR: Raised when it would return more characters than
+ * fit in a <code>DOMString</code> variable on the implementation
+ * platform.
+ */
+ public void setNodeValue(String arg0) throws DOMException {
+ document.setNodeValue(arg0);
+ }
+
+ /**
+ * A code representing the type of the underlying object, as defined above.
+ */
+ public short getNodeType() {
+ return document.getNodeType();
+ }
+
+ /**
+ * The parent of this node. All nodes, except <code>Attr</code>,
+ * <code>Document</code>, <code>DocumentFragment</code>,
+ * <code>Entity</code>, and <code>Notation</code> may have a parent.
+ * However, if a node has just been created and not yet added to the
+ * tree, or if it has been removed from the tree, this is
+ * <code>null</code>.
+ */
+ public Node getParentNode() {
+ return document.getParentNode();
+ }
+
+ /**
+ * A <code>NodeList</code> that contains all children of this node. If
+ * there are no children, this is a <code>NodeList</code> containing no
+ * nodes.
+ */
+ public NodeList getChildNodes() {
+ return document.getChildNodes();
+ }
+
+ /**
+ * The first child of this node. If there is no such node, this returns
+ * <code>null</code>.
+ */
+ public Node getFirstChild() {
+ return document.getFirstChild();
+ }
+
+ /**
+ * The last child of this node. If there is no such node, this returns
+ * <code>null</code>.
+ */
+ public Node getLastChild() {
+ return document.getLastChild();
+ }
+
+ /**
+ * The node immediately preceding this node. If there is no such node,
+ * this returns <code>null</code>.
+ */
+ public Node getPreviousSibling() {
+ return document.getPreviousSibling();
+ }
+
+ /**
+ * The node immediately following this node. If there is no such node,
+ * this returns <code>null</code>.
+ */
+ public Node getNextSibling() {
+ return document.getNextSibling();
+ }
+
+ /**
+ * A <code>NamedNodeMap</code> containing the attributes of this node (if
+ * it is an <code>Element</code>) or <code>null</code> otherwise.
+ */
+ public NamedNodeMap getAttributes() {
+ return document.getAttributes();
+ }
+
+ /**
+ * The <code>Document</code> object associated with this node. This is
+ * also the <code>Document</code> object used to create new nodes. When
+ * this node is a <code>Document</code> or a <code>DocumentType</code>
+ * which is not used with any <code>Document</code> yet, this is
+ * <code>null</code>.
+ */
+ public Document getOwnerDocument() {
+ return document.getOwnerDocument();
+ }
+
+ /**
+ * Inserts the node <code>newChild</code> before the existing child node
+ * <code>refChild</code>. If <code>refChild</code> is <code>null</code>,
+ * insert <code>newChild</code> at the end of the list of children.
+ * <br>If <code>newChild</code> is a <code>DocumentFragment</code> object,
+ * all of its children are inserted, in the same order, before
+ * <code>refChild</code>. If the <code>newChild</code> is already in the
+ * tree, it is first removed.
+ *
+ * @param newChild The node to insert.
+ * @param refChild The reference node, i.e., the node before which the
+ * new node must be inserted.
+ * @return The node being inserted.
+ * @throws DOMException HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
+ * allow children of the type of the <code>newChild</code> node, or if
+ * the node to insert is one of this node's ancestors or this node
+ * itself.
+ * <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created
+ * from a different document than the one that created this node.
+ * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or
+ * if the parent of the node being inserted is readonly.
+ * <br>NOT_FOUND_ERR: Raised if <code>refChild</code> is not a child of
+ * this node.
+ */
+ public Node insertBefore(Node newChild, Node refChild) throws DOMException {
+ return document.insertBefore(newChild, refChild);
+ }
+
+ /**
+ * Replaces the child node <code>oldChild</code> with <code>newChild</code>
+ * in the list of children, and returns the <code>oldChild</code> node.
+ * <br>If <code>newChild</code> is a <code>DocumentFragment</code> object,
+ * <code>oldChild</code> is replaced by all of the
+ * <code>DocumentFragment</code> children, which are inserted in the
+ * same order. If the <code>newChild</code> is already in the tree, it
+ * is first removed.
+ *
+ * @param newChild The new node to put in the child list.
+ * @param oldChild The node being replaced in the list.
+ * @return The node replaced.
+ * @throws DOMException HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
+ * allow children of the type of the <code>newChild</code> node, or if
+ * the node to put in is one of this node's ancestors or this node
+ * itself.
+ * <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created
+ * from a different document than the one that created this node.
+ * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node or the parent of
+ * the new node is readonly.
+ * <br>NOT_FOUND_ERR: Raised if <code>oldChild</code> is not a child of
+ * this node.
+ */
+ public Node replaceChild(Node newChild, Node oldChild) throws DOMException {
+ return document.replaceChild(newChild, oldChild);
+ }
+
+ /**
+ * Removes the child node indicated by <code>oldChild</code> from the list
+ * of children, and returns it.
+ *
+ * @param oldChild The node being removed.
+ * @return The node removed.
+ * @throws DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+ * <br>NOT_FOUND_ERR: Raised if <code>oldChild</code> is not a child of
+ * this node.
+ */
+ public Node removeChild(Node oldChild) throws DOMException {
+ return document.removeChild(oldChild);
+ }
+
+ /**
+ * Adds the node <code>newChild</code> to the end of the list of children
+ * of this node. If the <code>newChild</code> is already in the tree, it
+ * is first removed.
+ *
+ * @param newChild The node to add.If it is a
+ * <code>DocumentFragment</code> object, the entire contents of the
+ * document fragment are moved into the child list of this node
+ * @return The node added.
+ * @throws DOMException HIERARCHY_REQUEST_ERR: Raised if this node is of a type that does not
+ * allow children of the type of the <code>newChild</code> node, or if
+ * the node to append is one of this node's ancestors or this node
+ * itself.
+ * <br>WRONG_DOCUMENT_ERR: Raised if <code>newChild</code> was created
+ * from a different document than the one that created this node.
+ * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly or
+ * if the previous parent of the node being inserted is readonly.
+ */
+ public Node appendChild(Node newChild) throws DOMException {
+ return document.appendChild(newChild);
+ }
+
+ /**
+ * Returns whether this node has any children.
+ *
+ * @return <code>true</code> if this node has any children,
+ * <code>false</code> otherwise.
+ */
+ public boolean hasChildNodes() {
+ return document.hasChildNodes();
+ }
+
+ /**
+ * Returns a duplicate of this node, i.e., serves as a generic copy
+ * constructor for nodes. The duplicate node has no parent; (
+ * <code>parentNode</code> is <code>null</code>.).
+ * <br>Cloning an <code>Element</code> copies all attributes and their
+ * values, including those generated by the XML processor to represent
+ * defaulted attributes, but this method does not copy any text it
+ * contains unless it is a deep clone, since the text is contained in a
+ * child <code>Text</code> node. Cloning an <code>Attribute</code>
+ * directly, as opposed to be cloned as part of an <code>Element</code>
+ * cloning operation, returns a specified attribute (
+ * <code>specified</code> is <code>true</code>). Cloning any other type
+ * of node simply returns a copy of this node.
+ * <br>Note that cloning an immutable subtree results in a mutable copy,
+ * but the children of an <code>EntityReference</code> clone are readonly
+ * . In addition, clones of unspecified <code>Attr</code> nodes are
+ * specified. And, cloning <code>Document</code>,
+ * <code>DocumentType</code>, <code>Entity</code>, and
+ * <code>Notation</code> nodes is implementation dependent.
+ *
+ * @param deep If <code>true</code>, recursively clone the subtree under
+ * the specified node; if <code>false</code>, clone only the node
+ * itself (and its attributes, if it is an <code>Element</code>).
+ * @return The duplicate node.
+ */
+ public Node cloneNode(boolean deep) {
+ return document.cloneNode(deep);
+ }
+
+ /**
+ * Puts all <code>Text</code> nodes in the full depth of the sub-tree
+ * underneath this <code>Node</code>, including attribute nodes, into a
+ * "normal" form where only structure (e.g., elements, comments,
+ * processing instructions, CDATA sections, and entity references)
+ * separates <code>Text</code> nodes, i.e., there are neither adjacent
+ * <code>Text</code> nodes nor empty <code>Text</code> nodes. This can
+ * be used to ensure that the DOM view of a document is the same as if
+ * it were saved and re-loaded, and is useful when operations (such as
+ * XPointer lookups) that depend on a particular document tree
+ * structure are to be used.In cases where the document contains
+ * <code>CDATASections</code>, the normalize operation alone may not be
+ * sufficient, since XPointers do not differentiate between
+ * <code>Text</code> nodes and <code>CDATASection</code> nodes.
+ */
+ public void normalize() {
+ document.normalize();
+ }
+
+ /**
+ * Tests whether the DOM implementation implements a specific feature and
+ * that feature is supported by this node.
+ *
+ * @param feature The name of the feature to test. This is the same name
+ * which can be passed to the method <code>hasFeature</code> on
+ * <code>DOMImplementation</code>.
+ * @param version This is the version number of the feature to test. In
+ * Level 2, version 1, this is the string "2.0". If the version is not
+ * specified, supporting any version of the feature will cause the
+ * method to return <code>true</code>.
+ * @return Returns <code>true</code> if the specified feature is
+ * supported on this node, <code>false</code> otherwise.
+ * @since DOM Level 2
+ */
+ public boolean isSupported(String feature, String version) {
+ return document.isSupported(feature, version);
+ }
+
+ /**
+ * The namespace URI of this node, or <code>null</code> if it is
+ * unspecified.
+ * <br>This is not a computed value that is the result of a namespace
+ * lookup based on an examination of the namespace declarations in
+ * scope. It is merely the namespace URI given at creation time.
+ * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and
+ * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1
+ * method, such as <code>createElement</code> from the
+ * <code>Document</code> interface, this is always <code>null</code>.Per
+ * the Namespaces in XML Specification an attribute does not inherit
+ * its namespace from the element it is attached to. If an attribute is
+ * not explicitly given a namespace, it simply has no namespace.
+ *
+ * @since DOM Level 2
+ */
+ public String getNamespaceURI() {
+ return document.getNamespaceURI();
+ }
+
+ /**
+ * The namespace prefix of this node, or <code>null</code> if it is
+ * unspecified.
+ * <br>Note that setting this attribute, when permitted, changes the
+ * <code>nodeName</code> attribute, which holds the qualified name, as
+ * well as the <code>tagName</code> and <code>name</code> attributes of
+ * the <code>Element</code> and <code>Attr</code> interfaces, when
+ * applicable.
+ * <br>Note also that changing the prefix of an attribute that is known to
+ * have a default value, does not make a new attribute with the default
+ * value and the original prefix appear, since the
+ * <code>namespaceURI</code> and <code>localName</code> do not change.
+ * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and
+ * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1
+ * method, such as <code>createElement</code> from the
+ * <code>Document</code> interface, this is always <code>null</code>.
+ *
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
+ * illegal character, per the XML 1.0 specification .
+ * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+ * <br>NAMESPACE_ERR: Raised if the specified <code>prefix</code> is
+ * malformed per the Namespaces in XML specification, if the
+ * <code>namespaceURI</code> of this node is <code>null</code>, if the
+ * specified prefix is "xml" and the <code>namespaceURI</code> of this
+ * node is different from "http://www.w3.org/XML/1998/namespace", if
+ * this node is an attribute and the specified prefix is "xmlns" and
+ * the <code>namespaceURI</code> of this node is different from "
+ * http://www.w3.org/2000/xmlns/", or if this node is an attribute and
+ * the <code>qualifiedName</code> of this node is "xmlns" .
+ * @since DOM Level 2
+ */
+ public String getPrefix() {
+ return document.getPrefix();
+ }
+
+ /**
+ * The namespace prefix of this node, or <code>null</code> if it is
+ * unspecified.
+ * <br>Note that setting this attribute, when permitted, changes the
+ * <code>nodeName</code> attribute, which holds the qualified name, as
+ * well as the <code>tagName</code> and <code>name</code> attributes of
+ * the <code>Element</code> and <code>Attr</code> interfaces, when
+ * applicable.
+ * <br>Note also that changing the prefix of an attribute that is known to
+ * have a default value, does not make a new attribute with the default
+ * value and the original prefix appear, since the
+ * <code>namespaceURI</code> and <code>localName</code> do not change.
+ * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and
+ * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1
+ * method, such as <code>createElement</code> from the
+ * <code>Document</code> interface, this is always <code>null</code>.
+ *
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
+ * illegal character, per the XML 1.0 specification .
+ * <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+ * <br>NAMESPACE_ERR: Raised if the specified <code>prefix</code> is
+ * malformed per the Namespaces in XML specification, if the
+ * <code>namespaceURI</code> of this node is <code>null</code>, if the
+ * specified prefix is "xml" and the <code>namespaceURI</code> of this
+ * node is different from "http://www.w3.org/XML/1998/namespace", if
+ * this node is an attribute and the specified prefix is "xmlns" and
+ * the <code>namespaceURI</code> of this node is different from "
+ * http://www.w3.org/2000/xmlns/", or if this node is an attribute and
+ * the <code>qualifiedName</code> of this node is "xmlns" .
+ * @since DOM Level 2
+ */
+ public void setPrefix(String arg0) throws DOMException {
+ document.setPrefix(arg0);
+ }
+
+ /**
+ * Returns the local part of the qualified name of this node.
+ * <br>For nodes of any type other than <code>ELEMENT_NODE</code> and
+ * <code>ATTRIBUTE_NODE</code> and nodes created with a DOM Level 1
+ * method, such as <code>createElement</code> from the
+ * <code>Document</code> interface, this is always <code>null</code>.
+ *
+ * @since DOM Level 2
+ */
+ public String getLocalName() {
+ return document.getLocalName();
+ }
+
+ /**
+ * Returns whether this node (if it is an element) has any attributes.
+ *
+ * @return <code>true</code> if this node has any attributes,
+ * <code>false</code> otherwise.
+ * @since DOM Level 2
+ */
+ public boolean hasAttributes() {
+ return document.hasAttributes();
+ }
+
+ protected void setMessage(SOAPMessageImpl message) {
+ soapMessage = message;
+ }
}