glyn        02/04/08 07:19:44

  Modified:    java/src/org/apache/axis/message MessageElement.java
               java/test/message TestMessageElement.java
  Log:
  Fix bug - addChild should set the child's parent.
  
  Implemented detachNode.
  
  Revision  Changes    Path
  1.92      +22 -6     xml-axis/java/src/org/apache/axis/message/MessageElement.java
  
  Index: MessageElement.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/MessageElement.java,v
  retrieving revision 1.91
  retrieving revision 1.92
  diff -u -r1.91 -r1.92
  --- MessageElement.java       25 Mar 2002 16:12:16 -0000      1.91
  +++ MessageElement.java       8 Apr 2002 14:19:44 -0000       1.92
  @@ -124,7 +124,6 @@
       protected Element elementRep = null;
   
       protected MessageElement parent = null;
  -    // Do we need links to our children too?
   
       public ArrayList namespaces = null;
       
  @@ -327,8 +326,20 @@
           if (children == null)
               children = new ArrayList();
           children.add(el);
  +        el.parent = this;
       }
  -    
  +
  +    /**
  +     * Remove a child element.
  +     */
  +    private void removeChild(MessageElement child) {
  +        // Remove all occurrences in case it has been added multiple times.
  +        int i;
  +        while ((i = children.indexOf(child)) != -1) {
  +            children.remove(i);
  +        }
  +    }
  +     
       public ArrayList getChildren()
       {
           return children;
  @@ -710,12 +721,17 @@
       }
   
       /**
  -     * No-opped.
  +     * Break the relationship between this element and its parent, if any.
        */
  -    public void detachNode() {}
  -    
  +    public void detachNode() {
  +        if (parent != null) {
  +            parent.removeChild(this);
  +            parent = null;
  +        }
  +    }
  +
       /**
  -     * No-opped.
  +     * No-opped - Axis does not recycle nodes.
        */
       public void recycleNode() {}
   
  
  
  
  1.2       +25 -0     xml-axis/java/test/message/TestMessageElement.java
  
  Index: TestMessageElement.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/message/TestMessageElement.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestMessageElement.java   25 Mar 2002 16:12:16 -0000      1.1
  +++ TestMessageElement.java   8 Apr 2002 14:19:44 -0000       1.2
  @@ -123,4 +123,29 @@
           assertEquals("Child 1 not found", child1, c1only.next());
           assertTrue("Unexpected child", !c1only.hasNext());
       }
  +    public void testDetachNode() throws Exception {
  +        SOAPConstants sc = SOAPConstants.SOAP11_CONSTANTS;
  +        EnvelopeBuilder eb = new EnvelopeBuilder(Message.REQUEST, sc);
  +        DeserializationContext dc = new DeserializationContextImpl(null,
  +                                                                   eb); 
  +        SOAPElement parent = new MessageElement("parent.names",
  +                                                "parent",
  +                                                "parns:parent",
  +                                                null,
  +                                                dc);
  +        SOAPElement child1 = parent.addChildElement("child1");
  +        SOAPElement child2 = parent.addChildElement("child2");
  +        SOAPElement child3 = parent.addChildElement("child3");
  +
  +        child2.detachNode();
  +        SOAPElement c[] = {child1, child3}; 
  +        
  +        Iterator children = parent.getChildElements();
  +        for (int i = 0; i < 2; i++) {
  +            assertEquals("Child not found",
  +                         c[i],
  +                         children.next());
  +        }
  +        assertTrue("Unexpected child", !children.hasNext());
  +    }
   }
  
  
  


Reply via email to