You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ga...@apache.org on 2008/09/11 06:00:09 UTC
svn commit: r694104 - in /webservices/axis2/trunk/java/modules/saaj:
src/org/apache/axis2/saaj/ test/org/apache/axis2/saaj/
Author: gawor
Date: Wed Sep 10 21:00:08 2008
New Revision: 694104
URL: http://svn.apache.org/viewvc?rev=694104&view=rev
Log:
make SOAPPartImpl methods return object of the right type. Also some removeChild improvements (AXIS2-4027)
Modified:
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java Wed Sep 10 21:00:08 2008
@@ -161,30 +161,37 @@
* @return the SAAJ Node corresponding to the domNode
*/
javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
+ return toSAAJNode(domNode, this);
+ }
+
+ /**
+ * Converts or extracts the SAAJ node from the given DOM Node (domNode)
+ *
+ * @param domNode
+ * @return the SAAJ Node corresponding to the domNode
+ */
+ static javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode, Node parentNode) {
if (domNode == null) {
return null;
}
+ Node saajNode = (Node)((NodeImpl)domNode).getUserData(SAAJ_NODE);
+ if (saajNode == null) { // if SAAJ node has not been set in userData, try to construct it
+ return toSAAJNode2(domNode, parentNode);
+ }
+ // update siblings for text nodes
if (domNode instanceof org.w3c.dom.Text || domNode instanceof org.w3c.dom.Comment) {
org.w3c.dom.Node prevSiblingDOMNode = domNode.getPreviousSibling();
org.w3c.dom.Node nextSiblingDOMNode = domNode.getNextSibling();
-
- TextImplEx saajTextNode = (TextImplEx)((NodeImpl)domNode).getUserData(SAAJ_NODE);
- if (saajTextNode == null) {
- // if SAAJ node has not been set in userData, try to construct it
- return toSAAJNode2(domNode);
- }
+
+ TextImplEx saajTextNode = (TextImplEx)saajNode;
+
saajTextNode.setPreviousSibling(prevSiblingDOMNode);
saajTextNode.setNextSibling(nextSiblingDOMNode);
- return saajTextNode;
- }
- Node saajNode = (Node)((NodeImpl)domNode).getUserData(SAAJ_NODE);
- if (saajNode == null) { // if SAAJ node has not been set in userData, try to construct it
- return toSAAJNode2(domNode);
}
return saajNode;
}
- private javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode) {
+ private static javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode, Node parentNode) {
if (domNode == null) {
return null;
}
@@ -260,13 +267,13 @@
} else if (domNode instanceof org.apache.axiom.om.impl.dom.DocumentImpl) {
// Must be a SOAPEnvelope
- if (!(this instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) {
+ if (!(parentNode instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) {
return null;
}
org.apache.axiom.om.impl.dom.DocumentImpl doomDocument
= (org.apache.axiom.om.impl.dom.DocumentImpl)domNode;
org.apache.axis2.saaj.SOAPEnvelopeImpl saajEnv =
- (org.apache.axis2.saaj.SOAPEnvelopeImpl) this;
+ (org.apache.axis2.saaj.SOAPEnvelopeImpl) parentNode;
javax.xml.soap.SOAPPart saajSOAPPart = null;
if (saajEnv.getSOAPPartParent() != null) {
// return existing SOAPPart
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java Wed Sep 10 21:00:08 2008
@@ -866,6 +866,15 @@
return element.toString();
}
+ public Node removeChild(Node oldChild) throws DOMException {
+ if (oldChild instanceof SOAPElementImpl) {
+ oldChild = ((SOAPElementImpl)oldChild).getElement();
+ } else if (oldChild instanceof TextImplEx) {
+ // TODO: handle text nodes somehow
+ }
+ return element.removeChild(oldChild);
+ }
+
public Node appendChild(Node child) throws DOMException {
if (getOwnerDocument() != child.getOwnerDocument()) {
throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Wrong document");
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=694104&r1=694103&r2=694104&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 Wed Sep 10 21:00:08 2008
@@ -844,7 +844,7 @@
* been removed from the tree, this is <code>null</code>.
*/
public Node getParentNode() {
- return document.getParentNode();
+ return toSAAJNode(document.getParentNode());
}
/**
@@ -852,17 +852,22 @@
* this is a <code>NodeList</code> containing no nodes.
*/
public NodeList getChildNodes() {
- return document.getChildNodes();
+ NodeList childNodes = document.getChildNodes();
+ NodeListImpl nodes = new NodeListImpl();
+ for (int i = 0; i < childNodes.getLength(); i++) {
+ nodes.addNode(toSAAJNode(childNodes.item(i)));
+ }
+ return nodes;
}
/** The first child of this node. If there is no such node, this returns <code>null</code>. */
public Node getFirstChild() {
- return document.getFirstChild();
+ return toSAAJNode(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();
+ return toSAAJNode(document.getLastChild());
}
/**
@@ -870,7 +875,7 @@
* <code>null</code>.
*/
public Node getPreviousSibling() {
- return document.getPreviousSibling();
+ return toSAAJNode(document.getPreviousSibling());
}
/**
@@ -878,7 +883,7 @@
* <code>null</code>.
*/
public Node getNextSibling() {
- return document.getNextSibling();
+ return toSAAJNode(document.getNextSibling());
}
/**
@@ -957,6 +962,11 @@
* this node.
*/
public Node removeChild(Node oldChild) throws DOMException {
+ if (oldChild instanceof SOAPElementImpl) {
+ oldChild = ((SOAPElementImpl)oldChild).getElement();
+ } else if (oldChild instanceof TextImplEx) {
+ // TODO: handle text nodes somehow
+ }
return document.removeChild(oldChild);
}
@@ -1225,4 +1235,8 @@
public void setValue(String value) {
throw new IllegalStateException("Cannot set value of SOAPPart.");
}
+
+ javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
+ return NodeImplEx.toSAAJNode(domNode, this);
+ }
}
Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java Wed Sep 10 21:00:08 2008
@@ -819,4 +819,34 @@
assertEquals("DEF", text.getData());
assertFalse(iter.hasNext());
}
+
+ public void testRemoveChild() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPBody soapBody = message.getSOAPBody();
+
+ assertFalse(soapBody.getChildElements().hasNext());
+
+ QName qname1 = new QName("http://wombat.ztrade.com",
+ "GetLastTradePrice", "ztrade");
+ SOAPElement child = soapBody.addChildElement(qname1);
+ child.addTextNode("foo");
+
+ assertTrue(child.getChildElements().hasNext());
+
+ Node textNode = (Node)child.getChildElements().next();
+ assertTrue(textNode instanceof Text);
+
+ /*
+ child.removeChild(textNode);
+
+ assertFalse(child.getChildElements().hasNext());
+ */
+
+ assertTrue(soapBody.getChildElements().hasNext());
+
+ soapBody.removeChild(child);
+
+ assertFalse(soapBody.getChildElements().hasNext());
+ }
}
Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java Wed Sep 10 21:00:08 2008
@@ -23,6 +23,7 @@
import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -245,4 +246,44 @@
SOAPElement e = se.getParentElement();
assertTrue(node == null);
}
+
+ public void testNodeTypes() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPPart soapPart = message.getSOAPPart();
+
+ assertTrue("first child", soapPart.getFirstChild() instanceof SOAPEnvelope);
+ assertTrue("last child", soapPart.getLastChild() instanceof SOAPEnvelope);
+
+ NodeList nodes = soapPart.getChildNodes();
+
+ assertEquals(1, nodes.getLength());
+ for (int i = 0; i < nodes.getLength(); i++) {
+ assertTrue(nodes.item(i) instanceof SOAPEnvelope);
+ }
+ }
+
+ public void testRemoveChild1() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPPart soapPart = message.getSOAPPart();
+
+ assertTrue("soap env before", soapPart.getFirstChild() instanceof SOAPEnvelope);
+
+ soapPart.removeChild(soapPart.getFirstChild());
+
+ assertTrue("soap env after", soapPart.getFirstChild() == null);
+ }
+
+ public void testRemoveChild2() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPPart soapPart = message.getSOAPPart();
+
+ assertTrue("soap env before", soapPart.getFirstChild() instanceof SOAPEnvelope);
+
+ soapPart.removeChild(soapPart.getEnvelope());
+
+ assertTrue("soap env after", soapPart.getFirstChild() == null);
+ }
}