Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=365487&r1=365486&r2=365487&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Mon Jan 2 16:28:43 2006
@@ -15,16 +15,32 @@
*/
package org.apache.axis2.saaj;
+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.SessionUtils2;
-import org.w3c.dom.*;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
-import javax.xml.soap.MimeHeaders;
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;
@@ -32,67 +48,67 @@
public class SOAPPartImpl extends SOAPPart {
- private SOAPMessageImpl msgObject;
- private MimeHeaders mimeHeaders = new MimeHeaders();
- private Object envelope;
- /**
- * default message encoding charset
- */
- private String currentEncoding = "UTF-8";
+ private Document document;
+ private SOAPMessage soapMessage;
+ private SOAPEnvelopeImpl envelope;
+ private MimeHeadersEx mimeHeaders = new MimeHeadersEx();
- public SOAPPartImpl(SOAPMessageImpl parent,
- Object initialContents,
- boolean isBodyStream) throws SOAPException {
- setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
- SessionUtils2.generateSessionId());
+ public SOAPPartImpl(SOAPMessageImpl parentSoapMsg,
+ SOAPEnvelopeImpl soapEnvelope) {
+
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, SessionUtils2.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, SessionUtils2.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), null);
- org.apache.axis2.soap.SOAPEnvelope omEnv = stAXSOAPModelBuilder.getSOAPEnvelope();
- envelope = new SOAPEnvelopeImpl(omEnv);
- ((SOAPEnvelopeImpl) envelope).setOwnerDocument(this);
- }
+ InputStreamReader isReader = new InputStreamReader(inputStream);
- } catch (Exception e) {
+ 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);
}
}
- public SOAPMessageImpl getMessage() {
- return msgObject;
- }
-
/**
- * Set the Message for this Part.
- * Do not call this Directly. Called by Message.
+ * Obtain the SOAPMessage
*
- * @param msg the Message
for this part
+ * @return the related SOAPMessage
*/
- public void setMessage(SOAPMessageImpl msg) {
- this.msgObject = msg;
+ public SOAPMessage getSoapMessage() {
+ return soapMessage;
}
/**
- * @see javax.xml.soap.SOAPPart#getEnvelope()
+ * Gets the SOAPEnvelope
object associated with
+ * this SOAPPart
object. Once the SOAP envelope is
+ * obtained, it can be used to get its contents.
+ *
+ * @return the SOAPEnvelope
object for this
+ * SOAPPart
object
+ * @throws SOAPException if there is a SOAP error
*/
public SOAPEnvelope getEnvelope() throws SOAPException {
- //if(envelope != null)
- return (SOAPEnvelope) envelope;
-
+ return envelope;
}
/**
@@ -148,9 +164,12 @@
* 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 MimeHeader
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
+ * @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) {
@@ -158,10 +177,22 @@
}
/**
- * Add the specified MIME header, as per JAXM.
+ * Creates a MimeHeader
object with the specified
+ * name and value and adds it to this SOAPPart
+ * object. If a MimeHeader
with the specified
+ * name already exists, this method adds the specified value
+ * to the already existing value(s).
+ *
Note that RFC822 headers can contain only US-ASCII + * characters.
* - * @param header the header to add - * @param value the value of that header + * @param header aString
giving the
+ * header name
+ * @param value a String
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);
@@ -180,397 +211,888 @@
}
/**
- * Get all headers that match.
+ * Retrieves all MimeHeader
objects that match
+ * a name in the given array.
*
- * @param match an array of String
s giving mime header names
- * @return an Iterator
over all values matching these headers
+ * @param names a String
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 Iterator
+ * object
*/
- public java.util.Iterator getMatchingMimeHeaders(final String[] match) {
- return mimeHeaders.getMatchingHeaders(match);
+ public Iterator getMatchingMimeHeaders(String[] names) {
+ return mimeHeaders.getMatchingHeaders(names);
}
/**
- * Get all headers that do not match.
+ * Retrieves all MimeHeader
objects whose name
+ * does not match a name in the given array.
*
- * @param match an array of String
s giving mime header names
- * @return an Iterator
over all values not matching these
- * headers
+ * @param names a String
array with
+ * the name(s) of the MIME headers not to be returned
+ * @return all of the MIME headers in this SOAPPart
+ * object except those that match one of the names in the
+ * given array. The nonmatching MIME headers are returned as
+ * an Iterator
object.
*/
- public java.util.Iterator getNonMatchingMimeHeaders(final String[] match) {
- return mimeHeaders.getNonMatchingHeaders(match);
+ public Iterator getNonMatchingMimeHeaders(String[] names) {
+ return mimeHeaders.getNonMatchingHeaders(names);
}
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#setContent(javax.xml.transform.Source)
+ /**
+ * Sets the content of the SOAPEnvelope
object
+ * with the data from the given Source
object.
+ *
+ * @param source javax.xml.transform.Source 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 Auto-generated method stub
-
+ //TODO: implementation
+ throw new UnsupportedOperationException("TODO");
}
- /* (non-Javadoc)
- * @see javax.xml.soap.SOAPPart#getContent()
- */
- public Source getContent() throws SOAPException {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- * Implementation of org.w3c.Document
- * Most of methods will be implemented using the delgate
- * instance of SOAPDocumentImpl
- * This is for two reasons:
- * - possible change of message classes, by extenstion of xerces implementation
- * - we cannot extends SOAPPart (multiple inheritance),
- * since it is defined as Abstract class
- * ***********************************************************
- */
-
- private Document document = new SOAPDocumentImpl(this);
-
/**
- * @since SAAJ 1.2
+ * Returns the content of the SOAPEnvelope as a JAXP
+ * Source
object.
+ *
+ * @return the content as a
+ * javax.xml.transform.Source
object
+ * @throws SOAPException if the implementation cannot
+ * convert the specified Source
object
+ * @see #setContent(javax.xml.transform.Source) setContent(javax.xml.transform.Source)
*/
- public Document getSOAPDocument() {
- if (document == null) {
- document = new SOAPDocumentImpl(this);
- }
- return document;
+ public Source getContent() throws SOAPException {
+ //TODO: implementation
+ throw new UnsupportedOperationException("TODO");
}
/**
- * @return
+ * The Document Type Declaration (see DocumentType
)
+ * associated with this document. For HTML documents as well as XML
+ * documents without a document type declaration this returns
+ * null
. The DOM Level 2 does not support editing the
+ * Document Type Declaration. docType
cannot be altered in
+ * any way, including through the use of methods inherited from the
+ * Node
interface, such as insertNode
or
+ * removeNode
.
*/
public DocumentType getDoctype() {
return document.getDoctype();
}
/**
- * @return
+ * The DOMImplementation
object that handles this document. A
+ * DOM application may use objects from multiple implementations.
*/
public DOMImplementation getImplementation() {
return document.getImplementation();
}
/**
- * SOAPEnvelope is the Document Elements of this XML document
+ * 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".
*/
- protected Document mDocument;
-
public Element getDocumentElement() {
- try {
- return getEnvelope();
- } catch (SOAPException se) {
- return null;
- }
+ return document.getDocumentElement();
}
/**
- * @param tagName
- * @return
- * @throws DOMException
+ * Creates an element of the type specified. Note that the instance
+ * returned implements the Element
interface, so attributes
+ * can be specified directly on the returned object.
+ * Attr
nodes representing them are automatically created
+ * and attached to the element.
+ * createElementNS
method.
+ *
+ * @param tagName The name of the element type to instantiate. For XML,
+ * this is case-sensitive. For HTML, the tagName
+ * parameter may be provided in any case, but it must be mapped to the
+ * canonical uppercase form by the DOM implementation.
+ * @return A new Element
object with the
+ * nodeName
attribute set to tagName
, and
+ * localName
, prefix
, and
+ * namespaceURI
set to null
.
+ * @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 DocumentFragment
object.
+ *
+ * @return A new DocumentFragment
.
+ */
public DocumentFragment createDocumentFragment() {
return document.createDocumentFragment();
}
+ /**
+ * Creates a Text
node given the specified string.
+ *
+ * @param data The data for the node.
+ * @return The new Text
object.
+ */
public Text createTextNode(String data) {
return document.createTextNode(data);
}
+ /**
+ * Creates a CDATASection
node whose value is the specified
+ * string.
+ *
+ * @param data The data for the CDATASection
contents.
+ * @return The new CDATASection
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 CDATASection
node whose value is the specified
+ * string.
+ *
+ * @param data The data for the CDATASection
contents.
+ * @return The new CDATASection
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);
}
- public ProcessingInstruction createProcessingInstruction(String target,
- String data)
- throws DOMException {
+ /**
+ * Creates a ProcessingInstruction
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 ProcessingInstruction
object.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified target contains an
+ * illegal character.
+ * Attr
of the given name. Note that the
+ * Attr
instance can then be set on an Element
+ * using the setAttributeNode
method.
+ * createAttributeNS
method.
+ *
+ * @param name The name of the attribute.
+ * @return A new Attr
object with the nodeName
+ * attribute set to name
, and localName
,
+ * prefix
, and namespaceURI
set to
+ * null
. 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 EntityReference
object. In addition, if the
+ * referenced entity is known, the child list of the
+ * EntityReference
node is made the same as that of the
+ * corresponding Entity
node.If any descendant of the
+ * Entity
node has an unbound namespace prefix, the
+ * corresponding descendant of the created EntityReference
+ * node is also unbound; (its namespaceURI
is
+ * null
). 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 EntityReference
object.
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified name contains an
+ * illegal character.
+ * NodeList
of all the Elements
with a
+ * given tag name in the order in which they are encountered in a
+ * preorder traversal of the Document
tree.
+ *
+ * @param tagname The name of the tag to match on. The special value "*"
+ * matches all tags.
+ * @return A new NodeList
object containing all the matched
+ * Elements
.
+ */
public NodeList getElementsByTagName(String tagname) {
return document.getElementsByTagName(tagname);
}
- public Node importNode(Node importedNode, boolean deep)
- throws DOMException {
+ /**
+ * Imports a node from another document to this document. The returned
+ * node has no parent; (parentNode
is null
).
+ * The source node is not altered or removed from the original document;
+ * this method creates a new copy of the source node.
+ * nodeName
and nodeType
, plus the
+ * attributes related to namespaces (prefix
,
+ * localName
, and namespaceURI
). As in the
+ * cloneNode
operation on a Node
, the source
+ * node is not altered.
+ * nodeType
, 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.
+ * ownerElement
attribute
+ * is set to null
and the specified
flag is
+ * set to true
on the generated Attr
. The
+ * descendants of the source Attr
are recursively imported
+ * and the resulting nodes reassembled to form the corresponding subtree.
+ * Note that the deep
parameter has no effect on
+ * Attr
nodes; they always carry their children with them
+ * when imported.deep
option
+ * was set to true
, 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
+ * DocumentFragment
.Document
+ * nodes cannot be imported.DocumentType
+ * nodes cannot be imported.Attr
+ * nodes are attached to the generated Element
. Default
+ * attributes are not copied, though if the document being imported into
+ * defines default attributes for this element name, those are assigned.
+ * If the importNode
deep
parameter was set to
+ * true
, the descendants of the source element are
+ * recursively imported and the resulting nodes reassembled to form the
+ * corresponding subtree.Entity
nodes can be
+ * imported, however in the current release of the DOM the
+ * DocumentType
is readonly. Ability to add these imported
+ * nodes to a DocumentType
will be considered for addition
+ * to a future release of the DOM.On import, the publicId
,
+ * systemId
, and notationName
attributes are
+ * copied. If a deep
import is requested, the descendants
+ * of the the source Entity
are recursively imported and
+ * the resulting nodes reassembled to form the corresponding subtree.EntityReference
itself is
+ * copied, even if a deep
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.Notation
nodes can be imported, however in the current
+ * release of the DOM the DocumentType
is readonly. Ability
+ * to add these imported nodes to a DocumentType
will be
+ * considered for addition to a future release of the DOM.On import, the
+ * publicId
and systemId
attributes are copied.
+ * Note that the deep
parameter has no effect on
+ * Notation
nodes since they never have any children.target
and data
values from those of the
+ * source node.CharacterData
copy their
+ * data
and length
attributes from those of
+ * the source node.true
, recursively import the subtree under
+ * the specified node; if false
, import only the node
+ * itself, as explained above. This has no effect on Attr
+ * , EntityReference
, and Notation
nodes.
+ * @return The imported node that belongs to this Document
.
+ * @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);
}
- public Element createElementNS(String namespaceURI, String qualifiedName)
- throws DOMException {
+ /**
+ * 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 Element
object with the following
+ * attributes:
+ * Attribute | + *Value | + *
---|---|
Node.nodeName |
+ *
+ * qualifiedName |
+ *
Node.namespaceURI |
+ *
+ * namespaceURI |
+ *
Node.prefix |
+ * prefix, extracted
+ * from qualifiedName , or null if there is
+ * no prefix |
+ *
Node.localName |
+ * local name, extracted from
+ * qualifiedName |
+ *
Element.tagName |
+ *
+ * qualifiedName |
+ *
qualifiedName
is
+ * malformed per the Namespaces in XML specification, if the
+ * qualifiedName
has a prefix and the
+ * namespaceURI
is null
, or if the
+ * qualifiedName
has a prefix that is "xml" and the
+ * namespaceURI
is different from "
+ * http://www.w3.org/XML/1998/namespace" .
+ * "XML"
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);
}
- public Attr createAttributeNS(String namespaceURI, String qualifiedName)
- throws DOMException {
+ /**
+ * 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 Attr
object with the following attributes:
+ * + * Attribute | + *Value | + *
---|---|
Node.nodeName |
+ * qualifiedName | + *
+ * Node.namespaceURI |
+ * namespaceURI |
+ *
+ * Node.prefix |
+ * prefix, extracted from
+ * qualifiedName , or null if there is no
+ * prefix |
+ *
Node.localName |
+ * local name, extracted from
+ * qualifiedName |
+ *
Attr.name |
+ *
+ * qualifiedName |
+ *
Node.nodeValue |
+ * the empty + * string | + *
qualifiedName
is
+ * malformed per the Namespaces in XML specification, if the
+ * qualifiedName
has a prefix and the
+ * namespaceURI
is null
, if the
+ * qualifiedName
has a prefix that is "xml" and the
+ * namespaceURI
is different from "
+ * http://www.w3.org/XML/1998/namespace", or if the
+ * qualifiedName
, or its prefix, is "xmlns" and the
+ * namespaceURI
is different from "
+ * http://www.w3.org/2000/xmlns/".
+ * "XML"
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);
}
- public NodeList getElementsByTagNameNS(String namespaceURI,
- String localName) {
+ /**
+ * Returns a NodeList
of all the Elements
with a
+ * given local name and namespace URI in the order in which they are
+ * encountered in a preorder traversal of the Document
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 NodeList
object containing all the matched
+ * Elements
.
+ * @since DOM Level 2
+ */
+ public NodeList getElementsByTagNameNS(String namespaceURI, String localName) {
return document.getElementsByTagNameNS(namespaceURI, localName);
}
+ /**
+ * Returns the Element
whose ID
is given by
+ * elementId
. If no such element exists, returns
+ * null
. Behavior is not defined if more than one element
+ * has this ID
. 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 null
.
+ *
+ * @param elementId The unique id
value for an element.
+ * @return The matching element.
+ * @since DOM Level 2
+ */
public Element getElementById(String elementId) {
return document.getElementById(elementId);
}
- public String getInputEncoding() {
- return null;
- }
-
- public String getXmlEncoding() {
- return null;
- }
-
- public boolean getXmlStandalone() {
- return false;
- }
-
- public void setXmlStandalone(boolean xmlStandalone) throws DOMException {
-
- }
-
- public String getXmlVersion() {
- return null;
- }
-
- public void setXmlVersion(String xmlVersion) throws DOMException {
-
- }
-
- /////////////////////////////////////////////////////////////
-
- public String getEncoding() {
- return currentEncoding;
- }
-
- public void setEncoding(String s) {
- currentEncoding = s;
- }
-
- public boolean getStandalone() {
- throw new UnsupportedOperationException("Not yet implemented.71");
- }
-
-
- public void setStandalone(boolean flag) {
- throw new UnsupportedOperationException("Not yet implemented.72");
- }
-
- public boolean getStrictErrorChecking() {
- throw new UnsupportedOperationException("Not yet implemented.73");
- }
-
-
- public void setStrictErrorChecking(boolean flag) {
- throw new UnsupportedOperationException("Not yet implemented. 74");
- }
-
- public String getDocumentURI() {
- return null;
- }
-
- public void setDocumentURI(String documentURI) {
-
- }
-
-
- public String getVersion() {
- throw new UnsupportedOperationException("Not yet implemented. 75");
- }
-
-
- public void setVersion(String s) {
- throw new UnsupportedOperationException("Not yet implemented.76");
- }
-
-
- public Node adoptNode(Node node)
- throws DOMException {
- throw new UnsupportedOperationException("Not yet implemented.77");
- }
-
- public DOMConfiguration getDomConfig() {
- return null;
- }
-
- public void normalizeDocument() {
-
- }
-
- public Node renameNode(Node n, String namespaceURI, String qualifiedName) throws DOMException {
- return null;
- }
-
/**
- * Node Implementation
+ * 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 null
, 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 DOMString
variable on the implementation
+ * platform.
+ */
public String getNodeValue() throws DOMException {
return document.getNodeValue();
}
- public void setNodeValue(String nodeValue) throws DOMException {
- document.setNodeValue(nodeValue);
+ /**
+ * The value of this node, depending on its type; see the table above.
+ * When it is defined to be null
, 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 DOMString
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 Attr
,
+ * Document
, DocumentFragment
,
+ * Entity
, and Notation
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
+ * null
.
+ */
public Node getParentNode() {
return document.getParentNode();
}
+ /**
+ * A NodeList
that contains all children of this node. If
+ * there are no children, this is a NodeList
containing no
+ * nodes.
+ */
public NodeList getChildNodes() {
return document.getChildNodes();
}
+ /**
+ * The first child of this node. If there is no such node, this returns
+ * null
.
+ */
public Node getFirstChild() {
return document.getFirstChild();
}
+ /**
+ * The last child of this node. If there is no such node, this returns
+ * null
.
+ */
public Node getLastChild() {
return document.getLastChild();
}
+ /**
+ * The node immediately preceding this node. If there is no such node,
+ * this returns null
.
+ */
public Node getPreviousSibling() {
return document.getPreviousSibling();
}
+ /**
+ * The node immediately following this node. If there is no such node,
+ * this returns null
.
+ */
public Node getNextSibling() {
return document.getNextSibling();
}
+ /**
+ * A NamedNodeMap
containing the attributes of this node (if
+ * it is an Element
) or null
otherwise.
+ */
public NamedNodeMap getAttributes() {
return document.getAttributes();
}
+ /**
+ * The Document
object associated with this node. This is
+ * also the Document
object used to create new nodes. When
+ * this node is a Document
or a DocumentType
+ * which is not used with any Document
yet, this is
+ * null
.
+ */
public Document getOwnerDocument() {
return document.getOwnerDocument();
}
+ /**
+ * Inserts the node newChild
before the existing child node
+ * refChild
. If refChild
is null
,
+ * insert newChild
at the end of the list of children.
+ * newChild
is a DocumentFragment
object,
+ * all of its children are inserted, in the same order, before
+ * refChild
. If the newChild
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 newChild
node, or if
+ * the node to insert is one of this node's ancestors or this node
+ * itself.
+ * newChild
was created
+ * from a different document than the one that created this node.
+ * refChild
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 oldChild
with newChild
+ * in the list of children, and returns the oldChild
node.
+ * newChild
is a DocumentFragment
object,
+ * oldChild
is replaced by all of the
+ * DocumentFragment
children, which are inserted in the
+ * same order. If the newChild
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 newChild
node, or if
+ * the node to put in is one of this node's ancestors or this node
+ * itself.
+ * newChild
was created
+ * from a different document than the one that created this node.
+ * oldChild
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 oldChild
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.
+ * oldChild
is not a child of
+ * this node.
+ */
public Node removeChild(Node oldChild) throws DOMException {
return document.removeChild(oldChild);
}
+ /**
+ * Adds the node newChild
to the end of the list of children
+ * of this node. If the newChild
is already in the tree, it
+ * is first removed.
+ *
+ * @param newChild The node to add.If it is a
+ * DocumentFragment
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 newChild
node, or if
+ * the node to append is one of this node's ancestors or this node
+ * itself.
+ * newChild
was created
+ * from a different document than the one that created this node.
+ * true
if this node has any children,
+ * false
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; (
+ * parentNode
is null
.).
+ * Element
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 Text
node. Cloning an Attribute
+ * directly, as opposed to be cloned as part of an Element
+ * cloning operation, returns a specified attribute (
+ * specified
is true
). Cloning any other type
+ * of node simply returns a copy of this node.
+ * EntityReference
clone are readonly
+ * . In addition, clones of unspecified Attr
nodes are
+ * specified. And, cloning Document
,
+ * DocumentType
, Entity
, and
+ * Notation
nodes is implementation dependent.
+ *
+ * @param deep If true
, recursively clone the subtree under
+ * the specified node; if false
, clone only the node
+ * itself (and its attributes, if it is an Element
).
+ * @return The duplicate node.
+ */
public Node cloneNode(boolean deep) {
return document.cloneNode(deep);
}
+ /**
+ * Puts all Text
nodes in the full depth of the sub-tree
+ * underneath this Node
, including attribute nodes, into a
+ * "normal" form where only structure (e.g., elements, comments,
+ * processing instructions, CDATA sections, and entity references)
+ * separates Text
nodes, i.e., there are neither adjacent
+ * Text
nodes nor empty Text
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
+ * CDATASections
, the normalize operation alone may not be
+ * sufficient, since XPointers do not differentiate between
+ * Text
nodes and CDATASection
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 hasFeature
on
+ * DOMImplementation
.
+ * @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 true
.
+ * @return Returns true
if the specified feature is
+ * supported on this node, false
otherwise.
+ * @since DOM Level 2
+ */
public boolean isSupported(String feature, String version) {
return document.isSupported(feature, version);
}
+ /**
+ * The namespace URI of this node, or null
if it is
+ * unspecified.
+ * ELEMENT_NODE
and
+ * ATTRIBUTE_NODE
and nodes created with a DOM Level 1
+ * method, such as createElement
from the
+ * Document
interface, this is always null
.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 null
if it is
+ * unspecified.
+ * nodeName
attribute, which holds the qualified name, as
+ * well as the tagName
and name
attributes of
+ * the Element
and Attr
interfaces, when
+ * applicable.
+ * namespaceURI
and localName
do not change.
+ * ELEMENT_NODE
and
+ * ATTRIBUTE_NODE
and nodes created with a DOM Level 1
+ * method, such as createElement
from the
+ * Document
interface, this is always null
.
+ *
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
+ * illegal character, per the XML 1.0 specification .
+ * prefix
is
+ * malformed per the Namespaces in XML specification, if the
+ * namespaceURI
of this node is null
, if the
+ * specified prefix is "xml" and the namespaceURI
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 namespaceURI
of this node is different from "
+ * http://www.w3.org/2000/xmlns/", or if this node is an attribute and
+ * the qualifiedName
of this node is "xmlns" .
+ * @since DOM Level 2
+ */
public String getPrefix() {
return document.getPrefix();
}
- public void setPrefix(String prefix) throws DOMException {
- document.setPrefix(prefix);
+ /**
+ * The namespace prefix of this node, or null
if it is
+ * unspecified.
+ * nodeName
attribute, which holds the qualified name, as
+ * well as the tagName
and name
attributes of
+ * the Element
and Attr
interfaces, when
+ * applicable.
+ * namespaceURI
and localName
do not change.
+ * ELEMENT_NODE
and
+ * ATTRIBUTE_NODE
and nodes created with a DOM Level 1
+ * method, such as createElement
from the
+ * Document
interface, this is always null
.
+ *
+ * @throws DOMException INVALID_CHARACTER_ERR: Raised if the specified prefix contains an
+ * illegal character, per the XML 1.0 specification .
+ * prefix
is
+ * malformed per the Namespaces in XML specification, if the
+ * namespaceURI
of this node is null
, if the
+ * specified prefix is "xml" and the namespaceURI
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 namespaceURI
of this node is different from "
+ * http://www.w3.org/2000/xmlns/", or if this node is an attribute and
+ * the qualifiedName
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.
+ * ELEMENT_NODE
and
+ * ATTRIBUTE_NODE
and nodes created with a DOM Level 1
+ * method, such as createElement
from the
+ * Document
interface, this is always null
.
+ *
+ * @since DOM Level 2
+ */
public String getLocalName() {
return document.getLocalName();
}
+ /**
+ * Returns whether this node (if it is an element) has any attributes.
+ *
+ * @return true
if this node has any attributes,
+ * false
otherwise.
+ * @since DOM Level 2
+ */
public boolean hasAttributes() {
return document.hasAttributes();
}
- public String getBaseURI() {
- return null;
- }
-
- public short compareDocumentPosition(Node other) throws DOMException {
- return 0;
+ protected void setMessage(SOAPMessageImpl message) {
+ soapMessage = message;
}
-
- public String getTextContent() throws DOMException {
- return null;
- }
-
- public void setTextContent(String textContent) throws DOMException {
-
- }
-
- public boolean isSameNode(Node other) {
- return false;
- }
-
- public String lookupPrefix(String namespaceURI) {
- return null;
- }
-
- public boolean isDefaultNamespace(String namespaceURI) {
- return false;
- }
-
- public String lookupNamespaceURI(String prefix) {
- return null;
- }
-
- public boolean isEqualNode(Node arg) {
- return false;
- }
-
- public Object getFeature(String feature, String version) {
- return null;
- }
-
- public Object setUserData(String key, Object data, UserDataHandler handler) {
- return null;
- }
-
- public Object getUserData(String key) {
- return null;
- }
-
}
Added: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java?rev=365487&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java (added)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java Mon Jan 2 16:28:43 2006
@@ -0,0 +1,277 @@
+/*
+ * Copyright 2004,2005 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.apache.axis2.saaj;
+
+import org.apache.axis2.om.DOOMAbstractFactory;
+import org.apache.axis2.om.OMContainer;
+import org.apache.axis2.om.OMException;
+import org.apache.axis2.om.impl.OMOutputImpl;
+import org.apache.axis2.om.impl.dom.TextImpl;
+import org.w3c.dom.DOMException;
+
+import javax.xml.soap.Text;
+import javax.xml.stream.XMLStreamException;
+
+public class TextImplEx extends NodeImplEx implements Text {
+
+ //TODO: assign textNode
+
+ private TextImpl textNode;
+
+ public TextImplEx(String data) {
+ textNode = (TextImpl) DOOMAbstractFactory.getOMFactory().createText(data);
+ }
+ /*public TextImplEx(SOAPElementImpl parent, String s) throws SOAPException {
+ //super();
+ //super.setParentElement(parent);
+ OMElement par = parent.getOMElement();
+ omNode =
+ omText =
+ org.apache.axis2.om.OMAbstractFactory.getOMFactory()
+ .createText(par, s);
+ }
+
+ public TextImplEx(org.w3c.dom.CharacterData data) {
+ if (data == null) {
+ throw new IllegalArgumentException("Text value may not be null.");
+ }
+ omText =
+ org.apache.axis2.om.OMAbstractFactory.getOMFactory()
+ .createText(data.getData());
+ }
+
+ public TextImplEx(OMText omText) {
+ omNode = this.omText = omText;
+ }*/
+
+ /**
+ * Retrieves whether this Text
object
+ * represents a comment.
+ *
+ * @return true
if this Text
object is
+ * a comment; false
otherwise
+ */
+ public boolean isComment() {
+ String value = textNode.getText();
+ return value.startsWith("");
+ }
+
+ /**
+ * The name of this node, depending on its type; see the table above.
+ */
+ public String getNodeName() {
+ return textNode.getNodeName();
+ }
+
+ /**
+ * A code representing the type of the underlying object, as defined above.
+ */
+ public short getNodeType() {
+ return textNode.getNodeType();
+ }
+
+ /**
+ * Breaks this node into two nodes at the specified offset
,
+ * keeping both in the tree as siblings. After being split, this node
+ * will contain all the content up to the offset
point. A
+ * new node of the same type, which contains all the content at and
+ * after the offset
point, is returned. If the original
+ * node had a parent node, the new node is inserted as the next sibling
+ * of the original node. When the offset
is equal to the
+ * length of this node, the new node has no data.
+ *
+ * @param offset The 16-bit unit offset at which to split, starting from
+ * 0
.
+ * @return The new node, of the same type as this node.
+ * @throws DOMException INDEX_SIZE_ERR: Raised if the specified offset is negative or greater
+ * than the number of 16-bit units in data
.
+ * CharacterData
node. However,
+ * implementation limits may mean that the entirety of a node's data may
+ * not fit into a single DOMString
. In such cases, the user
+ * may call substringData
to retrieve the data in
+ * appropriately sized pieces.
+ *
+ * @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 DOMString
variable on the implementation
+ * platform.
+ */
+ public String getData() throws DOMException {
+ return textNode.getData();
+ }
+
+ /**
+ * The character data of the node that implements this interface. The DOM
+ * implementation may not put arbitrary limits on the amount of data
+ * that may be stored in a CharacterData
node. However,
+ * implementation limits may mean that the entirety of a node's data may
+ * not fit into a single DOMString
. In such cases, the user
+ * may call substringData
to retrieve the data in
+ * appropriately sized pieces.
+ *
+ * @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 DOMString
variable on the implementation
+ * platform.
+ */
+ public void setData(String data) throws DOMException {
+ textNode.setData(data);
+ }
+
+ /**
+ * Extracts a range of data from the node.
+ *
+ * @param offset Start offset of substring to extract.
+ * @param count The number of 16-bit units to extract.
+ * @return The specified substring. If the sum of offset
and
+ * count
exceeds the length
, then all 16-bit
+ * units to the end of the data are returned.
+ * @throws DOMException INDEX_SIZE_ERR: Raised if the specified offset
is
+ * negative or greater than the number of 16-bit units in
+ * data
, or if the specified count
is
+ * negative.
+ * DOMString
.
+ */
+ public String substringData(int offset, int count) throws DOMException {
+ return textNode.substringData(offset, count);
+ }
+
+ /**
+ * Append the string to the end of the character data of the node. Upon
+ * success, data
provides access to the concatenation of
+ * data
and the DOMString
specified.
+ *
+ * @param value The DOMString
to append.
+ * @throws DOMException NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
+ */
+ public void appendData(String value) throws DOMException {
+ textNode.appendData(value);
+ }
+
+ /**
+ * Insert a string at the specified 16-bit unit offset.
+ *
+ * @param offset The character offset at which to insert.
+ * @param data The DOMString
to insert.
+ * @throws DOMException INDEX_SIZE_ERR: Raised if the specified offset
is
+ * negative or greater than the number of 16-bit units in
+ * data
.
+ * data
and length
reflect the change.
+ *
+ * @param offset The offset from which to start removing.
+ * @param count The number of 16-bit units to delete. If the sum of
+ * offset
and count
exceeds
+ * length
then all 16-bit units from offset
+ * to the end of the data are deleted.
+ * @throws DOMException INDEX_SIZE_ERR: Raised if the specified offset
is
+ * negative or greater than the number of 16-bit units in
+ * data
, or if the specified count
is
+ * negative.
+ * offset
and count
exceeds
+ * length
, then all 16-bit units to the end of the data
+ * are replaced; (i.e., the effect is the same as a remove
+ * method call with the same range, followed by an append
+ * method invocation).
+ * @param data The DOMString
with which the range must be
+ * replaced.
+ * @throws DOMException INDEX_SIZE_ERR: Raised if the specified offset
is
+ * negative or greater than the number of 16-bit units in
+ * data
, or if the specified count
is
+ * negative.
+ *