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) {