Author: veithen
Date: Wed Sep 7 16:43:02 2011
New Revision: 1166257
URL: http://svn.apache.org/viewvc?rev=1166257&view=rev
Log:
Prefer adoptNode over importNode in order to avoid making unnecessary copies of
DOM trees.
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=1166257&r1=1166256&r2=1166257&view=diff
==============================================================================
---
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
(original)
+++
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Wed Sep 7 16:43:02 2011
@@ -808,6 +808,25 @@ public class RampartUtil {
return id;
}
+ /**
+ * Change the owner document of the given node. The method first attempts
to move the node using
+ * {@link Document#adoptNode(Node)}. If that fails, it will import the
node into the target
+ * document using {@link Document#importNode(Node, boolean)}.
+ *
+ * @param targetDocument
+ * the target document
+ * @param node
+ * the node to adopt or import
+ * @return the adopted or imported node
+ */
+ public static Node adoptNode(Document targetDocument, Node node) {
+ Node result = targetDocument.adoptNode(node);
+ if (result == null) {
+ result = targetDocument.importNode(node, true);
+ }
+ return result;
+ }
+
public static Element appendChildToSecHeader(RampartMessageData rmd,
OMElement elem) {
return appendChildToSecHeader(rmd, (Element)elem);
@@ -816,8 +835,7 @@ public class RampartUtil {
public static Element appendChildToSecHeader(RampartMessageData rmd,
Element elem) {
Element secHeaderElem = rmd.getSecHeader().getSecurityHeader();
- Node node = secHeaderElem.getOwnerDocument().importNode(
- elem, true);
+ Node node = adoptNode(secHeaderElem.getOwnerDocument(), elem);
return (Element)secHeaderElem.appendChild(node);
}