You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by gd...@apache.org on 2004/09/14 16:52:39 UTC

cvs commit: ws-axis/java/src/org/apache/axis/message MessageElement.java SOAPEnvelope.java

gdaniels    2004/09/14 07:52:39

  Modified:    java/src/org/apache/axis/message MessageElement.java
                        SOAPEnvelope.java
  Log:
  Fix a couple of problems maintaining relationships between elements when cloning.
  
  Thanks to Mike Theroux at Sonic for the patch.
  
  Revision  Changes    Path
  1.182     +11 -0     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.181
  retrieving revision 1.182
  diff -u -r1.181 -r1.182
  --- MessageElement.java	7 Sep 2004 09:42:43 -0000	1.181
  +++ MessageElement.java	14 Sep 2004 14:52:38 -0000	1.182
  @@ -419,6 +419,8 @@
                               NodeImpl clonedChild = (NodeImpl)child.cloneNode(deep); // deep == true
                               clonedChild.setParent(clonedSelf);
                               clonedChild.setOwnerDocument(soapPart);
  +                            
  +                            clonedSelf.childDeepCloned( child, clonedChild );
                           }
                       }
                   }
  @@ -429,6 +431,15 @@
               return null;
           }
       }
  +
  +    // Called when a child is cloned from cloneNode().
  +    //
  +    // This is used by sub-classes to update internal state when specific elements
  +    // are cloned.
  +    protected void childDeepCloned( NodeImpl oldNode, NodeImpl newNode )
  +    {
  +    }
  +
       /**
        *  protected clone method (not public)
        *
  
  
  
  1.102     +32 -0     ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
  
  Index: SOAPEnvelope.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- SOAPEnvelope.java	18 Aug 2004 16:19:01 -0000	1.101
  +++ SOAPEnvelope.java	14 Sep 2004 14:52:38 -0000	1.102
  @@ -618,7 +618,39 @@
           return super.removeChild(oldChild);
       }
   
  +    public Node cloneNode(boolean deep)
  +    {
  +        SOAPEnvelope envelope = (SOAPEnvelope)super.cloneNode( deep );
   
  +        if( !deep )
  +        {
  +            envelope.body = null;
  +            envelope.header = null;
  +        }
  +
  +        return envelope;
  +    }
  +
  +    protected void childDeepCloned( NodeImpl oldNode, NodeImpl newNode )
  +    {
  +        if( oldNode == body )
  +        {
  +            body = (SOAPBody)newNode;
  +
  +            try {
  +                body.setParentElement(this);
  +            } catch (SOAPException ex) {
  +                // class cast should never fail when parent is a SOAPEnvelope
  +                log.fatal(Messages.getMessage("exception00"), ex);
  +            }
  +        }
  +        else
  +        if( oldNode == header )
  +        {
  +            header = (SOAPHeader)newNode;
  +        }
  +    }
  +    
       public void setOwnerDocument(org.apache.axis.SOAPPart sp) {
           super.setOwnerDocument(sp);
           if(body != null) {