diff --git a/lib/SAML2/Assertion.php b/lib/SAML2/Assertion.php index 4cc24573cf37cb5acf13d565c517ea5b60fd654d..be4b8ea351368c5af8332c7947050e2eeab53be3 100644 --- a/lib/SAML2/Assertion.php +++ b/lib/SAML2/Assertion.php @@ -879,14 +879,20 @@ class SAML2_Assertion implements SAML2_SignedElement { /** * Convert this assertion to an XML element. * + * @param DOMNode|NULL $parentElement The DOM node the assertion should be created in. * @return DOMElement This assertion. */ - public function toXML() { + public function toXML(DOMNode $parentElement = NULL) { - $document = new DOMDocument(); + if ($parentElement === NULL) { + $document = new DOMDocument(); + $parentElement = $document; + } else { + $document = $parentElement->ownerDocument; + } $root = $document->createElementNS(SAML2_Const::NS_SAML, 'saml:' . 'Assertion'); - $document->appendChild($root); + $parentElement->appendChild($root); /* Ugly hack to add another namespace declaration to the root element. */ $root->setAttributeNS(SAML2_Const::NS_SAMLP, 'samlp:tmp', 'tmp'); diff --git a/lib/SAML2/EncryptedAssertion.php b/lib/SAML2/EncryptedAssertion.php index 5c22dfe3764472b296f36c202b3c042b50d9ff3c..af87ec8fb94666905419629bfd60701186cf113c 100644 --- a/lib/SAML2/EncryptedAssertion.php +++ b/lib/SAML2/EncryptedAssertion.php @@ -143,14 +143,20 @@ class SAML2_EncryptedAssertion { /** * Convert this encrypted assertion to an XML element. * + * @param DOMNode|NULL $parentElement The DOM node the assertion should be created in. * @return DOMElement This encrypted assertion. */ - public function toXML() { + public function toXML(DOMNode $parentElement = NULL) { - $document = new DOMDocument(); + if ($parentElement === NULL) { + $document = new DOMDocument(); + $parentElement = $document; + } else { + $document = $parentElement->ownerDocument; + } $root = $document->createElementNS(SAML2_Const::NS_SAML, 'saml:' . 'EncryptedAssertion'); - $document->appendChild($root); + $parentElement->appendChild($root); $root->appendChild($document->importNode($this->encryptedData, TRUE)); diff --git a/lib/SAML2/Response.php b/lib/SAML2/Response.php index d45c73f35e3aa1309107d8453e878381f86638cb..adae1fed0e0b0400f2c94190689087a2a4ffa588 100644 --- a/lib/SAML2/Response.php +++ b/lib/SAML2/Response.php @@ -73,9 +73,7 @@ class SAML2_Response extends SAML2_StatusResponse { $root = parent::toUnsignedXML(); foreach ($this->assertions as $assertion) { - $node = $assertion->toXML(); - $node = $root->ownerDocument->importNode($node, TRUE); - $root->appendChild($node); + $node = $assertion->toXML($root); } return $root;