diff options
author | Adrian Kummerländer | 2014-06-05 20:44:26 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-06-05 20:44:26 +0200 |
commit | 78bb3387b15d15d766fb5d17a99612f0480f2bee (patch) | |
tree | c87a2516f56d7f6317a704b91b340bc14cabfd28 /src/support/error_capacitor.cc | |
parent | 11355181c0b5f8377774daefcc17bb5e6bc20f61 (diff) | |
download | InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.gz InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.bz2 InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.lz InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.xz InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.zst InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.zip |
Implemented ErrorMultiplexer as primary error handler
* ErrorMultiplexer is derived from both xercesc::ErrorHandler and xalan::ProblemListener
* registers itself as XalanTransformer's ErrorHandler and ProblemListener
* distributes captured errors and warnings to all registered ErrorMultiplexer::Receiver instances
** ErrorCapacitor implements the ErrorMultiplexer::Receiver interface and as such registers itself in a given ErrorMultiplexer instance
** ErrorMultiplexer reduces the different xalan and xercesc internal error classifications into either warnings or errors
* this was implemented to make it possible to easily differentiate between warnings and errors
** previously warnings were treated as errors
** ErrorCapacitor ignores warnings and only captures errors
** WarningCapacitor will be implemented to handle warnings during XSLT processing
Diffstat (limited to 'src/support/error_capacitor.cc')
-rw-r--r-- | src/support/error_capacitor.cc | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/src/support/error_capacitor.cc b/src/support/error_capacitor.cc deleted file mode 100644 index e624cd1..0000000 --- a/src/support/error_capacitor.cc +++ /dev/null @@ -1,133 +0,0 @@ -#include "error_capacitor.h" - -#include <xercesc/sax/SAXParseException.hpp> - -#include <xalanc/PlatformSupport/DOMStringPrintWriter.hpp> - -#include <iostream> - -#include "support/xalan_string.h" -#include "support/xerces_string_guard.h" - -namespace { - -using InputXSLT::XercesStringGuard; - -inline std::string getMessage(const xercesc::SAXParseException& exception) { - return ( - std::string(*XercesStringGuard<char>(exception.getMessage())) - + ". (Occurred in entity '" - + std::string(*XercesStringGuard<char>(exception.getSystemId())) - + "', at line " - + std::to_string(exception.getLineNumber()) - + ", column " - + std::to_string(exception.getColumnNumber()) - + ".)" - ); -} - -} - -namespace InputXSLT { - -ErrorCapacitor::ErrorCapacitor(xalan::XalanTransformer* transformer): - transformer_(transformer), - error_cache_(new error_cache()) { - this->transformer_->setErrorHandler(this); - this->transformer_->setProblemListener(this); -} - -ErrorCapacitor::~ErrorCapacitor() { - this->transformer_->setErrorHandler(nullptr); - this->transformer_->setProblemListener(nullptr); -} - -void ErrorCapacitor::discharge() { - if ( !this->error_cache_->empty() ) { - throw exception(std::move(this->error_cache_)); - } -} - -void ErrorCapacitor::warning(const xercesc::SAXParseException& exception) { - this->error_cache_->emplace_back( - "Warning: " + getMessage(exception) - ); -} - -void ErrorCapacitor::error(const xercesc::SAXParseException& exception) { - this->error_cache_->emplace_back( - "Error: " + getMessage(exception) - ); -} - -void ErrorCapacitor::fatalError(const xercesc::SAXParseException& exception) { - this->error_cache_->emplace_back( - "Fatal error: " + getMessage(exception) - ); -} - -void ErrorCapacitor::resetErrors() { } - -void ErrorCapacitor::problem( - xalan::ProblemListenerBase::eSource source, - xalan::ProblemListenerBase::eClassification classification, - const xalan::XalanDOMString& message, - const xalan::Locator* locator, - const xalan::XalanNode* node -) { - xalan::XalanDOMString problemSummary; - xalan::DOMStringPrintWriter writer(problemSummary); - - defaultFormat( - writer, - source, - classification, - message, - locator, - node - ); - - this->error_cache_->emplace_back(toString(problemSummary)); -} - -void ErrorCapacitor::problem( - xalan::ProblemListenerBase::eSource source, - xalan::ProblemListenerBase::eClassification classification, - const xalan::XalanDOMString& message, - const xalan::XalanNode* node -) { - xalan::XalanDOMString problemSummary; - xalan::DOMStringPrintWriter writer(problemSummary); - - defaultFormat( - writer, - source, - classification, - message, - node - ); - - this->error_cache_->emplace_back(toString(problemSummary)); -} - -void ErrorCapacitor::problem( - xalan::ProblemListenerBase::eSource, - xalan::ProblemListenerBase::eClassification, - const xalan::XalanNode*, - const xalan::ElemTemplateElement*, - const xalan::XalanDOMString&, - const xalan::XalanDOMChar*, - xalan::XalanFileLoc, - xalan::XalanFileLoc -) { } - -void ErrorCapacitor::setPrintWriter(xalan::PrintWriter*) { } - -ErrorCapacitor::exception::exception(error_cache_ptr ptr): - error_cache_(std::move(ptr)) { } - -auto ErrorCapacitor::exception::getCachedErrors() const -> const error_cache* { - return this->error_cache_.get(); -} - -} |