From: cantor Date: Mon, 15 Feb 2010 14:01:32 +0000 (+0000) Subject: Wrap importNode call in exception handler. X-Git-Tag: 1.4.1~120 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fxmltooling.git;a=commitdiff_plain;h=41b308634246e677a1a54d587b58a41901af3460 Wrap importNode call in exception handler. git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/branches/REL_1@718 de75baf8-a10c-0410-a50a-987c0e22f00f --- diff --git a/xmltooling/AbstractDOMCachingXMLObject.cpp b/xmltooling/AbstractDOMCachingXMLObject.cpp index bfd0353..117225a 100644 --- a/xmltooling/AbstractDOMCachingXMLObject.cpp +++ b/xmltooling/AbstractDOMCachingXMLObject.cpp @@ -124,9 +124,18 @@ void AbstractDOMCachingXMLObject::releaseChildrenDOM(bool propagateRelease) cons DOMElement* AbstractDOMCachingXMLObject::cloneDOM(DOMDocument* doc) const { if (getDOM()) { - if (!doc) - doc=DOMImplementationRegistry::getDOMImplementation(NULL)->createDocument(); - return static_cast(doc->importNode(getDOM(),true)); + DOMDocument* cloneDoc = doc; + if (!cloneDoc) + cloneDoc=DOMImplementationRegistry::getDOMImplementation(NULL)->createDocument(); + try { + return static_cast(cloneDoc->importNode(getDOM(),true)); + } + catch (XMLException& ex) { + if (!doc) + cloneDoc->release(); + auto_ptr_char temp(ex.getMessage()); + m_log.error("DOM clone failed: %s", temp.get()); + } } return NULL; }