diff options
author | Adrian Kummerländer | 2014-06-08 16:49:41 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-06-08 16:49:41 +0200 |
commit | f13e1fa9a41006d80e6923489414cfdc2fcadd08 (patch) | |
tree | cc17dacae4402ad655fda62f686585737623ee7f /src/function | |
parent | 49e2010b489ab6d5516a9abd896c67738e0dc1cc (diff) | |
download | InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar.gz InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar.bz2 InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar.lz InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar.xz InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.tar.zst InputXSLT-f13e1fa9a41006d80e6923489414cfdc2fcadd08.zip |
Handling xercesc::DOMException in "read-xml-file" and "external-text-formatter"
* external DOM may cause xercesc::DOMException's to be thrown instead of passing all errors to the custom error handlers
** these exceptions are handled by this commit by setting the "result" attribute to "error" and adding "error" value nodes with further information
Diffstat (limited to 'src/function')
-rw-r--r-- | src/function/base.h | 2 | ||||
-rw-r--r-- | src/function/external_text_formatter.cc | 19 | ||||
-rw-r--r-- | src/function/read_xml_file.cc | 18 |
3 files changed, 30 insertions, 9 deletions
diff --git a/src/function/base.h b/src/function/base.h index 56712bb..3ca1d61 100644 --- a/src/function/base.h +++ b/src/function/base.h @@ -82,7 +82,7 @@ class FunctionBase : public xalan::Function { const xalan::XalanDOMString& getError( xalan::XalanDOMString& result) const { result.assign(std::string( - "The function expects " + + "The function expects " + std::to_string(parameter_count) + " parameter(s)" ).data()); diff --git a/src/function/external_text_formatter.cc b/src/function/external_text_formatter.cc index 9fef439..4171ded 100644 --- a/src/function/external_text_formatter.cc +++ b/src/function/external_text_formatter.cc @@ -84,10 +84,21 @@ xercesc::DOMDocument* FunctionExternalTextFormatter::constructDocument( result.setAttribute("code", std::to_string(status.exit_status())); if ( status.exited() ) { - result.setAttribute("result", "success"); - result.setContent( - importDocumentElement(outputStream, domDocument)->getChildNodes() - ); + try { + result.setContent( + importDocumentElement(outputStream, domDocument)->getChildNodes() + ); + + result.setAttribute("result", "success"); + } + catch ( const xercesc::DOMException& exception ) { + result.setAttribute("result", "error"); + + result.setValueNode( + "error", + *XercesStringGuard<char>(exception.msg) + ); + } } else { result.setAttribute("result", "error"); } diff --git a/src/function/read_xml_file.cc b/src/function/read_xml_file.cc index 65989b2..e4d256d 100644 --- a/src/function/read_xml_file.cc +++ b/src/function/read_xml_file.cc @@ -61,11 +61,21 @@ xercesc::DOMDocument* FunctionReadXmlFile::constructDocument( result.setAttribute("path", filePath.string()); if ( boost::filesystem::is_regular_file(filePath) ) { - result.setAttribute("result", "success"); + try { + result.setContent( + importDocumentElement(filePath.string(), domDocument) + ); - result.setContent( - importDocumentElement(filePath.string(), domDocument) - ); + result.setAttribute("result", "success"); + } + catch ( const xercesc::DOMException& exception ) { + result.setAttribute("result", "error"); + + result.setValueNode( + "error", + *XercesStringGuard<char>(exception.msg) + ); + } } else { result.setAttribute("result", "error"); } |