diff options
| author | Adrian Kummerländer | 2014-05-30 22:19:32 +0200 | 
|---|---|---|
| committer | Adrian Kummerländer | 2014-05-30 22:19:32 +0200 | 
| commit | 79d3e2bdfd441d6eba2f22af78d5bea5e488daf1 (patch) | |
| tree | b28b0603958140777ee46d98f2fc4359c9f72c4d /src/function | |
| parent | 484143667bd6885236b679a8f54dad3c512ea2dd (diff) | |
| download | InputXSLT-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.cc | 19 | 
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);  		}  	} | 
