When doing full document decryption in https://code.google.com/a/apache-extras.org/p/santuario-genxdm/, it is necessary to replace the document element of a document with its decrypted counterpart.
However, OMNodeImpl.detach doesn't inform the document that the element has been removed, and the OMDocumentImpl.documentElement still points at the one being detached. When subsequently attempting to add in the newly decrypted form of the element, it fails, asserting that the document already has an element.
The work-around here is to specifically check in the case of doing a detach on the element of a document, to set the document element of a document to null. Unfortunately, but do-able without resorting to implementation details.