aboutsummaryrefslogtreecommitdiff
path: root/src/function
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-05-29 13:26:37 +0200
committerAdrian Kummerländer2014-05-29 13:26:37 +0200
commit3bc793d95293d40dbab62c593ce4ceaa86fae25b (patch)
tree07a0f99d72a074a75955a593318cc8bcd394f4c2 /src/function
parent52b60c1a8c23f11ab18fad06e0957490c7436e0a (diff)
downloadInputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar.gz
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar.bz2
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar.lz
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar.xz
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.tar.zst
InputXSLT-3bc793d95293d40dbab62c593ce4ceaa86fae25b.zip
Improved TransformationFacade error handling
* ErrorHandler class created in 5859cb6 now caches all errors instead of pushing them to std::cerr ** cached errors are retrieved by TransformationFacade's "generate" member method * test frontend pushes all errors to std::cerr * FunctionTransform returns errors to the calling template as XML ** FunctionTransform test case demonstrates how one may test for successful transformation * "generate" member method returns std::string vector wrapped in a std::unique_ptr ** this is used as a kind of optional pointer, as the std::unique_ptr instance only wraps a vector if errors where actually generated
Diffstat (limited to 'src/function')
-rw-r--r--src/function/transform.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/function/transform.cc b/src/function/transform.cc
index fd28b34..7e8a844 100644
--- a/src/function/transform.cc
+++ b/src/function/transform.cc
@@ -38,17 +38,22 @@ xercesc::DOMDocument* FunctionTransform::constructDocument(
domDocument->getDocumentElement()
);
+ ResultNodeFacade result(domDocument, rootNode, "result");
+ result.setAttribute("name", targetPath);
+
InputXSLT::TransformationFacade transformation(
transformationPath,
this->include_resolver_
);
- if ( transformation.generate(targetPath, parameterObject) == 0 ) {
- ResultNodeFacade result(domDocument, rootNode, "result");
+ InputXSLT::TransformationFacade::return_type errors(
+ transformation.generate(targetPath, parameterObject)
+ );
- result.setAttribute("name", targetPath);
- } else {
- ResultNodeFacade result(domDocument, rootNode, "error");
+ if ( errors ) {
+ for ( auto&& error : *errors ) {
+ result.setValueNode("error", error);
+ }
}
return domDocument;