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)}.
        *