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 di...@apache.org on 2005/02/04 01:31:06 UTC
cvs commit: ws-axis/java/test/saaj TestSOAPElement.java
dims 2005/02/03 16:31:06
Modified: java/src/org/apache/axis/message MessageElement.java
SOAPDocumentImpl.java
java/test/saaj TestSOAPElement.java
Log:
Implementation and test for GetElementsByTagName
Revision Changes Path
1.192 +13 -20 ws-axis/java/src/org/apache/axis/message/MessageElement.java
Index: MessageElement.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
retrieving revision 1.191
retrieving revision 1.192
diff -u -r1.191 -r1.192
--- MessageElement.java 30 Dec 2004 15:59:57 -0000 1.191
+++ MessageElement.java 4 Feb 2005 00:31:06 -0000 1.192
@@ -1794,34 +1794,27 @@
* @see org.w3c.dom.Element#getElementsByTagName(String)
* @param tagName tag to look for.
* @return a list of elements
- * @todo this code looks dubious. Is it tested yet?
*/
public NodeList getElementsByTagName(String tagName) {
- //use this MessageElement class for Nodelist store
- MessageElement nodelist = new MessageElement();
-
- try{
- if(children != null){
- // add 2nd Generation
- for(int i =0; i < children.size(); i++){
- nodelist.addChild((MessageElement)children.get(i));
- }
- // add 3rd Generation
- for(int i =0; i < children.size(); i++){
- MessageElement child = (MessageElement)children.get(i);
- NodeList grandsons = child.getElementsByTagName(tagName);
- for(int j =0; j < grandsons.getLength(); j++){
- nodelist.addChild((MessageElement)grandsons.item(j));
+ NodeListImpl nodelist = new NodeListImpl();
+ for (int i = 0; children != null && i < children.size(); i++) {
+ if (children.get(i) instanceof Node) {
+ Node el = (Node)children.get(i);
+ if (el.getLocalName() != null && el.getLocalName()
+ .equals(tagName))
+ nodelist.addNode(el);
+ if (el instanceof Element) {
+ NodeList grandchildren =
+ ((Element)el).getElementsByTagName(tagName);
+ for (int j = 0; j < grandchildren.getLength(); j++) {
+ nodelist.addNode(grandchildren.item(j));
}
}
}
- }catch(SOAPException se){
- // TODO: handle properly
- log.debug("silently ignoring",se);
}
return nodelist;
}
-
+
/**
* get the attribute with namespace/local name match.
* @see org.w3c.dom.Element#getAttributeNS(String, String)
1.12 +4 -3 ws-axis/java/src/org/apache/axis/message/SOAPDocumentImpl.java
Index: SOAPDocumentImpl.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPDocumentImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SOAPDocumentImpl.java 29 Nov 2004 03:40:18 -0000 1.11
+++ SOAPDocumentImpl.java 4 Feb 2005 00:31:06 -0000 1.12
@@ -445,6 +445,7 @@
public NodeList getElementsByTagName(String localName) {
try {
+ NodeListImpl list = new NodeListImpl();
if (soapPart != null) {
SOAPEnvelope soapEnv =
(org.apache.axis.message.SOAPEnvelope) soapPart
@@ -452,15 +453,15 @@
SOAPHeader header =
(org.apache.axis.message.SOAPHeader) soapEnv.getHeader();
if (header != null) {
- return header.getElementsByTagName(localName);
+ list.addNodeList(header.getElementsByTagName(localName));
}
SOAPBody body =
(org.apache.axis.message.SOAPBody) soapEnv.getBody();
if (body != null) {
- return body.getElementsByTagName(localName);
+ list.addNodeList(body.getElementsByTagName(localName));
}
}
- return null;
+ return list;
} catch (SOAPException se) {
throw new DOMException(DOMException.INVALID_STATE_ERR, "");
}
1.3 +51 -0 ws-axis/java/test/saaj/TestSOAPElement.java
Index: TestSOAPElement.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/saaj/TestSOAPElement.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestSOAPElement.java 10 Aug 2004 13:38:05 -0000 1.2
+++ TestSOAPElement.java 4 Feb 2005 00:31:06 -0000 1.3
@@ -6,9 +6,19 @@
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.Text;
+import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPPart;
+import javax.xml.soap.SOAPEnvelope;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.io.ByteArrayInputStream;
+
+import org.w3c.dom.NodeList;
/**
* Test case for Axis impl of SAAJ {@link SOAPElement} interface ({@link org.apache.axis.message.MessageElement}).
@@ -24,6 +34,47 @@
soapElem = SOAPFactory.newInstance().createElement( "Test", "test", "http://test.apache.org/" );
}
+ public void testGetElementsByTagName() throws Exception {
+ String soapMessageWithLeadingComment =
+ "<?xml version='1.0' encoding='UTF-8'?>" +
+ "<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" +
+ "<env:Body>" +
+ "<echo>" +
+ " <data>\n" +
+ " <tag name=\"First\" >\n" +
+ " <Line> One </Line>\n" +
+ " <Line> Two </Line>\n" +
+ " </tag>\n" +
+ " <tag name =\"Second\" >\n" +
+ " <Line> Three </Line>\n" +
+ " <Line> Four </Line>\n" +
+ " </tag>\n" +
+ " <tag name =\"Third\" >\n" +
+ " <Line> Five </Line>\n" +
+ " <Line> Six </Line>\n" +
+ " </tag>\n" +
+ "</data>" +
+ "</echo>" +
+ "</env:Body>" +
+ "</env:Envelope>";
+
+ MessageFactory factory = MessageFactory.newInstance();
+ SOAPMessage message =
+ factory.createMessage(new MimeHeaders(),
+ new ByteArrayInputStream(soapMessageWithLeadingComment.getBytes()));
+ SOAPPart part = message.getSOAPPart();
+ SOAPEnvelope envelope = (SOAPEnvelope) part.getEnvelope();
+ NodeList nodes = envelope.getElementsByTagName("tag");
+ assertEquals(nodes.getLength(), 3);
+ NodeList nodes2 = envelope.getElementsByTagName("Line");
+ assertEquals(nodes2.getLength(), 6);
+
+ NodeList nodes3 = part.getElementsByTagName("tag");
+ assertEquals(nodes3.getLength(), 3);
+ NodeList nodes4 = part.getElementsByTagName("Line");
+ assertEquals(nodes4.getLength(), 6);
+ }
+
/**
* Test for Axis impl of {@link SOAPElement#addTextNode(String)}.
*