aboutsummaryrefslogtreecommitdiff
path: root/src/function
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-05-30 22:19:32 +0200
committerAdrian Kummerländer2014-05-30 22:19:32 +0200
commit79d3e2bdfd441d6eba2f22af78d5bea5e488daf1 (patch)
treeb28b0603958140777ee46d98f2fc4359c9f72c4d /src/function
parent484143667bd6885236b679a8f54dad3c512ea2dd (diff)
downloadInputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar.gz
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar.bz2
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar.lz
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar.xz
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.tar.zst
InputXSLT-79d3e2bdfd441d6eba2f22af78d5bea5e488daf1.zip
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<std::string> 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
Diffstat (limited to 'src/function')
-rw-r--r--src/function/transform.cc19
1 files changed, 9 insertions, 10 deletions
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);
}
}