Put decrypted objects into their own document.
authorScott Cantor <cantor.2@osu.edu>
Fri, 13 Apr 2007 03:04:27 +0000 (03:04 +0000)
committerScott Cantor <cantor.2@osu.edu>
Fri, 13 Apr 2007 03:04:27 +0000 (03:04 +0000)
saml/saml2/core/impl/Assertions20Impl.cpp
saml/saml2/core/impl/Protocols20Impl.cpp

index fe7a7b0..3a714b7 100644 (file)
@@ -202,8 +202,12 @@ namespace opensaml {
                 if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) {
                     DOMNode* plaintext=frag->getFirstChild();
                     if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) {
-                        auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(static_cast<DOMElement*>(plaintext)));
-                        ret->releaseThisAndChildrenDOM();
+                        // Import the tree into a new Document that we can bind to the unmarshalled object.
+                        XercesJanitor<DOMDocument> newdoc(XMLToolingConfig::getConfig().getParser().newDocument());
+                        DOMElement* treecopy = static_cast<DOMElement*>(newdoc->importNode(plaintext, true));
+                        newdoc->appendChild(treecopy);
+                        auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(treecopy, true));
+                        newdoc.release();
                         return ret.release();
                     }
                 }
index 800400b..e4b652e 100644 (file)
@@ -1298,8 +1298,12 @@ namespace opensaml {
                 if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) {
                     DOMNode* plaintext=frag->getFirstChild();
                     if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) {
-                        auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(static_cast<DOMElement*>(plaintext)));
-                        ret->releaseThisAndChildrenDOM();
+                        // Import the tree into a new Document that we can bind to the unmarshalled object.
+                        XercesJanitor<DOMDocument> newdoc(XMLToolingConfig::getConfig().getParser().newDocument());
+                        DOMElement* treecopy = static_cast<DOMElement*>(newdoc->importNode(plaintext, true));
+                        newdoc->appendChild(treecopy);
+                        auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(treecopy, true));
+                        newdoc.release();
                         return ret.release();
                     }
                 }