From 79d3e2bdfd441d6eba2f22af78d5bea5e488daf1 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Fri, 30 May 2014 22:19:32 +0200 Subject: Rewrote error handling based on exceptions * ErrorHandler is replaced by ErrorCapacitor ** temporarily registers itself as both the ProblemListener and ErrorHandler of a given XalanTransformer instance ** deregisters itself on destruction ** collects all problems and errors during its lifetime inside a internal std::vector instance ** if this instance is not empty it is thrown contained within a ErrorCapacitor::exception by the member method ErrorCapacitor::discharge * this enables using the same code for handling transformation compilation and generation errors and problems * updated test frontend accordingly --- src/function/transform.cc | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/function') diff --git a/src/function/transform.cc b/src/function/transform.cc index 7e8a844..e952018 100644 --- a/src/function/transform.cc +++ b/src/function/transform.cc @@ -41,17 +41,16 @@ xercesc::DOMDocument* FunctionTransform::constructDocument( ResultNodeFacade result(domDocument, rootNode, "result"); result.setAttribute("name", targetPath); - InputXSLT::TransformationFacade transformation( - transformationPath, - this->include_resolver_ - ); - - InputXSLT::TransformationFacade::return_type errors( - transformation.generate(targetPath, parameterObject) - ); + try { + InputXSLT::TransformationFacade transformation( + transformationPath, + this->include_resolver_ + ); - if ( errors ) { - for ( auto&& error : *errors ) { + transformation.generate(targetPath, parameterObject); + } + catch (const ErrorCapacitor::exception& exception) { + for ( auto&& error : *(exception.getCachedErrors()) ) { result.setValueNode("error", error); } } -- cgit v1.2.3