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/05/20 20:26:44 UTC
svn commit: r658375 - in /webservices/axis2/trunk/java/modules/saaj:
src/org/apache/axis2/saaj/ test/org/apache/axis2/saaj/
Author: gawor
Date: Tue May 20 11:26:44 2008
New Revision: 658375
URL: http://svn.apache.org/viewvc?rev=658375&view=rev
Log:
basic implementation of appendChild() method (AXIS2-3808)
Modified:
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.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/SOAPHeaderImpl.java
webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPBodyTest.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/SOAPEnvelopeTest.java
webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPHeaderTest.java
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java?rev=658375&r1=658374&r2=658375&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java Tue May 20 11:26:44 2008
@@ -97,6 +97,23 @@
return childEle;
}
+ @Override
+ protected Element appendElement(ElementImpl child) throws SOAPException {
+ String namespaceURI = child.getNamespaceURI();
+ String prefix = child.getPrefix();
+
+ element.declareNamespace(namespaceURI, prefix);
+
+ SOAPBodyElementImpl childEle = new SOAPBodyElementImpl(child);
+
+ childEle.element.setUserData(SAAJ_NODE, childEle, null);
+ childEle.element.setNamespace(childEle.element.declareNamespace(namespaceURI, prefix));
+ element.appendChild(childEle.element);
+ ((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, this, null);
+ childEle.setParentElement(this);
+ return childEle;
+ }
+
public SOAPElement addChildElement(SOAPElement soapElement) throws SOAPException {
String namespaceURI = soapElement.getNamespaceURI();
String prefix = soapElement.getPrefix();
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=658375&r1=658374&r2=658375&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 Tue May 20 11:26:44 2008
@@ -35,6 +35,7 @@
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -864,4 +865,72 @@
public String toString() {
return element.toString();
}
+
+ public Node appendChild(Node child) throws DOMException {
+ if (getOwnerDocument() != child.getOwnerDocument()) {
+ throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Wrong document");
+ }
+ try {
+ if (child instanceof Text) {
+ return appendText((Text)child);
+ } else if (child instanceof ElementImpl) {
+ return appendElement((ElementImpl)child);
+ }
+ } catch (SOAPException e) {
+ DOMException ex =
+ new DOMException(DOMException.HIERARCHY_REQUEST_ERR, e.getMessage());
+ ex.initCause(e);
+ throw ex;
+ }
+
+ return super.appendChild(child);
+ }
+
+ protected Text appendText(Text child) throws SOAPException {
+ String text = child.getData();
+ Text textNode = getOwnerDocument().createTextNode(text);
+ NodeImpl node = ((NodeImpl)element.appendChild(textNode));
+ TextImplEx saajTextNode = new TextImplEx(text, this);
+ node.setUserData(SAAJ_NODE, saajTextNode, null);
+ return saajTextNode;
+ }
+
+ protected Element appendElement(ElementImpl child) throws SOAPException {
+ String namespaceURI = child.getNamespaceURI();
+ String prefix = child.getPrefix();
+
+ SOAPElementImpl childEle = new SOAPElementImpl(child);
+
+ childEle.element.setUserData(SAAJ_NODE, childEle, null);
+ if (namespaceURI != null && namespaceURI.trim().length() > 0) {
+ childEle.element.setNamespace(childEle.element.declareNamespace(namespaceURI, prefix));
+ }
+ element.appendChild(childEle.element);
+ ((NodeImpl)childEle.element.getParentNode()).setUserData(SAAJ_NODE, this, null);
+ childEle.setParentElement(this);
+ return childEle;
+ }
+
+ protected void copyContents(SOAPElementImpl childEle, Node child) throws SOAPException {
+ NamedNodeMap attributes = child.getAttributes();
+ for (int i = 0; i < attributes.getLength(); i++) {
+ Attr node = (Attr)attributes.item(i);
+ QName name;
+ if (node.getPrefix() == null) {
+ name = new QName(node.getNamespaceURI(),
+ node.getLocalName());
+ } else {
+ name = new QName(node.getNamespaceURI(),
+ node.getLocalName(),
+ node.getPrefix());
+ }
+ childEle.addAttribute(name, node.getValue());
+ }
+
+ NodeList children = child.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ childEle.appendChild(node);
+ }
+ }
}
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java?rev=658375&r1=658374&r2=658375&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java Tue May 20 11:26:44 2008
@@ -31,6 +31,7 @@
import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory;
import org.apache.axiom.soap.impl.dom.soap12.SOAP12HeaderBlockImpl;
import org.apache.axis2.namespace.Constants;
+import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import javax.xml.soap.Name;
@@ -128,6 +129,31 @@
return soapHeaderElement;
}
+ @Override
+ protected Element appendElement(ElementImpl child) throws SOAPException {
+ OMNamespace ns = new NamespaceImpl(child.getNamespaceURI(),
+ child.getPrefix());
+ SOAPHeaderBlock headerBlock = null;
+ if (this.element.getOMFactory() instanceof SOAP11Factory) {
+ headerBlock = new SOAP11HeaderBlockImpl(child.getLocalName(), ns,
+ omSOAPHeader,
+ (SOAPFactory)this.element.getOMFactory());
+ } else {
+ headerBlock = new SOAP12HeaderBlockImpl(child.getLocalName(), ns,
+ omSOAPHeader,
+ (SOAPFactory)this.element.getOMFactory());
+
+ }
+
+ element.setUserData(SAAJ_NODE, this, null);
+
+ SOAPHeaderElementImpl soapHeaderElement = new SOAPHeaderElementImpl(headerBlock);
+ copyContents(soapHeaderElement, child);
+ soapHeaderElement.element.setUserData(SAAJ_NODE, soapHeaderElement, null);
+ soapHeaderElement.setParentElement(this);
+ return soapHeaderElement;
+ }
+
/**
* Creates a new <CODE>SOAPHeaderElement</CODE> object initialized with the specified name and
* adds it to this <CODE>SOAPHeader</CODE> object.
Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPBodyTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPBodyTest.java?rev=658375&r1=658374&r2=658375&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPBodyTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPBodyTest.java Tue May 20 11:26:44 2008
@@ -263,5 +263,53 @@
}
}
-
+ public void testAppendChild() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPBody soapBody = message.getSOAPBody();
+
+ assertEquals(0, soapBody.getChildNodes().getLength());
+ assertFalse(soapBody.getChildElements().hasNext());
+
+ Document doc = soapBody.getOwnerDocument();
+ String namespace = "http://example.com";
+ String localName = "GetLastTradePrice";
+ Element getLastTradePrice = doc.createElementNS(namespace, localName);
+ Element symbol = doc.createElement("symbol");
+ symbol.setAttribute("foo", "bar");
+ getLastTradePrice.appendChild(symbol);
+ org.w3c.dom.Text def = doc.createTextNode("DEF");
+ symbol.appendChild(def);
+
+ soapBody.appendChild(getLastTradePrice);
+
+ assertEquals(1, soapBody.getChildNodes().getLength());
+ Iterator iter = soapBody.getChildElements();
+ assertTrue(iter.hasNext());
+ Object obj = iter.next();
+ // must be SOAPBodyElement
+ assertTrue(obj instanceof SOAPBodyElement);
+ SOAPElement soapElement = (SOAPElement)obj;
+ assertEquals(namespace, soapElement.getNamespaceURI());
+ assertEquals(localName, soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof SOAPElement);
+ soapElement = (SOAPElement)obj;
+ assertEquals(null, soapElement.getNamespaceURI());
+ assertEquals("symbol", soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof Text);
+ Text text = (Text)obj;
+ assertEquals("DEF", text.getData());
+ assertFalse(iter.hasNext());
+ }
+
}
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=658375&r1=658374&r2=658375&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 Tue May 20 11:26:44 2008
@@ -21,6 +21,8 @@
import junit.framework.TestCase;
import org.apache.axiom.om.impl.dom.NodeImpl;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
@@ -767,4 +769,54 @@
fail("Error : " + e);
}
}
+
+ public void testAppendChild() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPBody soapBody = message.getSOAPBody();
+
+ QName qname1 = new QName("http://wombat.ztrade.com",
+ "GetLastTradePrice", "ztrade");
+ SOAPElement child = soapBody.addChildElement(qname1);
+
+ assertFalse(child.getChildElements().hasNext());
+
+ Document doc = child.getOwnerDocument();
+ String namespace = "http://example.com";
+ String localName = "GetLastTradePrice";
+ Element getLastTradePrice = doc.createElementNS(namespace, localName);
+ Element symbol = doc.createElement("symbol");
+ symbol.setAttribute("foo", "bar");
+ getLastTradePrice.appendChild(symbol);
+ org.w3c.dom.Text def = doc.createTextNode("DEF");
+ symbol.appendChild(def);
+
+ child.appendChild(getLastTradePrice);
+
+ Iterator iter = child.getChildElements();
+ assertTrue(iter.hasNext());
+ Object obj = iter.next();
+ assertTrue(obj instanceof SOAPElement);
+ SOAPElement soapElement = (SOAPElement)obj;
+ assertEquals(namespace, soapElement.getNamespaceURI());
+ assertEquals(localName, soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof SOAPElement);
+ soapElement = (SOAPElement)obj;
+ assertEquals(null, soapElement.getNamespaceURI());
+ assertEquals("symbol", soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof Text);
+ Text text = (Text)obj;
+ assertEquals("DEF", text.getData());
+ assertFalse(iter.hasNext());
+ }
}
Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPEnvelopeTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPEnvelopeTest.java?rev=658375&r1=658374&r2=658375&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPEnvelopeTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPEnvelopeTest.java Tue May 20 11:26:44 2008
@@ -21,6 +21,8 @@
import junit.framework.TestCase;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.Detail;
import javax.xml.soap.DetailEntry;
import javax.xml.soap.MessageFactory;
@@ -28,6 +30,7 @@
import javax.xml.soap.Name;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
@@ -38,6 +41,16 @@
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.Text;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
import java.io.ByteArrayInputStream;
import java.util.Iterator;
@@ -565,4 +578,55 @@
fail("Unexpected Exception: " + e.getMessage());
}
}
+
+ public void testTransform() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPBody body = message.getSOAPBody();
+ Source source = new DOMSource(createDocument());
+ Result result = new DOMResult(body);
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.transform(source, result);
+
+ assertEquals(1, body.getChildNodes().getLength());
+ Iterator iter = body.getChildElements();
+ assertTrue(iter.hasNext());
+ Object obj = iter.next();
+ assertTrue(obj instanceof SOAPBodyElement);
+ SOAPElement soapElement = (SOAPElement)obj;
+ assertEquals("http://example.com", soapElement.getNamespaceURI());
+ assertEquals("GetLastTradePrice", soapElement.getLocalName());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof SOAPElement);
+ soapElement = (SOAPElement)obj;
+ assertEquals("", soapElement.getNamespaceURI());
+ assertEquals("symbol", soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof Text);
+ Text text = (Text)obj;
+ assertEquals("DEF", text.getData());
+ assertFalse(iter.hasNext());
+ }
+
+ private Element createDocument() throws Exception {
+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+ documentBuilderFactory.setNamespaceAware(true);
+ DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+ Document document = documentBuilder.newDocument();
+ Element getLastTradePrice = document.createElementNS("http://example.com", "m:GetLastTradePrice");
+ Element symbol = document.createElement("symbol");
+ getLastTradePrice.appendChild(symbol);
+ org.w3c.dom.Text def = document.createTextNode("DEF");
+ symbol.appendChild(def);
+ document.appendChild(getLastTradePrice);
+ return getLastTradePrice;
+ }
}
\ No newline at end of file
Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPHeaderTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPHeaderTest.java?rev=658375&r1=658374&r2=658375&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPHeaderTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPHeaderTest.java Tue May 20 11:26:44 2008
@@ -34,6 +34,11 @@
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
+import javax.xml.soap.Text;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
import java.util.ArrayList;
import java.util.Iterator;
@@ -361,4 +366,52 @@
fail("Unexpected Exception: " + e.getMessage());
}
}
+
+ public void testAppendChild() throws Exception {
+ MessageFactory fact = MessageFactory.newInstance();
+ SOAPMessage message = fact.createMessage();
+ SOAPHeader soapHeader = message.getSOAPHeader();
+
+ assertEquals(0, soapHeader.getChildNodes().getLength());
+ assertFalse(soapHeader.getChildElements().hasNext());
+
+ Document doc = soapHeader.getOwnerDocument();
+ String namespace = "http://example.com";
+ String localName = "GetLastTradePrice";
+ Element getLastTradePrice = doc.createElementNS(namespace, localName);
+ Element symbol = doc.createElement("symbol");
+ symbol.setAttribute("foo", "bar");
+ getLastTradePrice.appendChild(symbol);
+ org.w3c.dom.Text def = doc.createTextNode("DEF");
+ symbol.appendChild(def);
+
+ soapHeader.appendChild(getLastTradePrice);
+
+ assertEquals(1, soapHeader.getChildNodes().getLength());
+ Iterator iter = soapHeader.getChildElements();
+ assertTrue(iter.hasNext());
+ Object obj = iter.next();
+ // must be SOAPHeaderElement
+ assertTrue(obj instanceof SOAPHeaderElement);
+ SOAPElement soapElement = (SOAPElement)obj;
+ assertEquals(namespace, soapElement.getNamespaceURI());
+ assertEquals(localName, soapElement.getLocalName());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof SOAPElement);
+ soapElement = (SOAPElement)obj;
+ assertEquals(null, soapElement.getNamespaceURI());
+ assertEquals("symbol", soapElement.getLocalName());
+ assertFalse(iter.hasNext());
+
+ iter = soapElement.getChildElements();
+ assertTrue(iter.hasNext());
+ obj = iter.next();
+ assertTrue(obj instanceof Text);
+ Text text = (Text)obj;
+ assertEquals("DEF", text.getData());
+ assertFalse(iter.hasNext());
+ }
}
\ No newline at end of file