Added error handler for DOM parsers
This commit is contained in:
@@ -237,6 +237,35 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EntityFileXMLErrorHandler : public xercesc::ErrorHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void warning(const xercesc::SAXParseException& e) override
|
||||||
|
{
|
||||||
|
reportParseException("Warning", e);
|
||||||
|
}
|
||||||
|
void error(const xercesc::SAXParseException& e) override
|
||||||
|
{
|
||||||
|
reportParseException("Error", e);
|
||||||
|
}
|
||||||
|
void fatalError(const xercesc::SAXParseException& e) override
|
||||||
|
{
|
||||||
|
reportParseException("FATAL ERROR", e);
|
||||||
|
}
|
||||||
|
void resetErrors() override { }
|
||||||
|
|
||||||
|
private:
|
||||||
|
void reportParseException(std::string type, const xercesc::SAXParseException& e)
|
||||||
|
{
|
||||||
|
char* message = xercesc::XMLString::transcode(e.getMessage());
|
||||||
|
char* systemID = xercesc::XMLString::transcode(e.getSystemId());
|
||||||
|
std::cerr << systemID << ":" << e.getLineNumber() << ":" << e.getColumnNumber() << std::endl;
|
||||||
|
std::cerr << type << ": " << message << std::endl;
|
||||||
|
xercesc::XMLString::release(&systemID);
|
||||||
|
xercesc::XMLString::release(&message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class EntityFile : public Resource
|
class EntityFile : public Resource
|
||||||
{
|
{
|
||||||
friend class ResourceManager;
|
friend class ResourceManager;
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ private:
|
|||||||
void parseComponentInfo()
|
void parseComponentInfo()
|
||||||
{
|
{
|
||||||
using namespace xercesc;
|
using namespace xercesc;
|
||||||
|
EntityFileXMLErrorHandler errorHandler;
|
||||||
auto grammarPool = m_EntityFile->GrammarPool();
|
auto grammarPool = m_EntityFile->GrammarPool();
|
||||||
bool whateverTheFuckThisIs;
|
bool whateverTheFuckThisIs;
|
||||||
auto xsModel = grammarPool->getXSModel(whateverTheFuckThisIs);
|
auto xsModel = grammarPool->getXSModel(whateverTheFuckThisIs);
|
||||||
@@ -95,7 +96,7 @@ private:
|
|||||||
char* annotationString = XMLString::transcode(componentAnnotation->getAnnotationString());
|
char* annotationString = XMLString::transcode(componentAnnotation->getAnnotationString());
|
||||||
MemBufInputSource annotationInput(reinterpret_cast<const XMLByte*>(annotationString), strlen(annotationString), "MemBuf: Annotation String");
|
MemBufInputSource annotationInput(reinterpret_cast<const XMLByte*>(annotationString), strlen(annotationString), "MemBuf: Annotation String");
|
||||||
XercesDOMParser parser(nullptr, XMLPlatformUtils::fgMemoryManager, grammarPool);
|
XercesDOMParser parser(nullptr, XMLPlatformUtils::fgMemoryManager, grammarPool);
|
||||||
//parser.setErrorHandler(m_ErrorHandler);
|
parser.setErrorHandler(&errorHandler);
|
||||||
parser.parse(annotationInput);
|
parser.parse(annotationInput);
|
||||||
XMLString::release(&annotationString);
|
XMLString::release(&annotationString);
|
||||||
auto doc = parser.getDocument();
|
auto doc = parser.getDocument();
|
||||||
@@ -178,13 +179,15 @@ private:
|
|||||||
{
|
{
|
||||||
using namespace xercesc;
|
using namespace xercesc;
|
||||||
|
|
||||||
|
EntityFileXMLErrorHandler errorHandler;
|
||||||
|
|
||||||
for (auto& ci : m_ComponentInfo) {
|
for (auto& ci : m_ComponentInfo) {
|
||||||
// Allocate memory for default values
|
// Allocate memory for default values
|
||||||
ci.second.Defaults = std::shared_ptr<char>(new char[ci.second.Meta.Stride]);
|
ci.second.Defaults = std::shared_ptr<char>(new char[ci.second.Meta.Stride]);
|
||||||
memset(ci.second.Defaults.get(), 0, ci.second.Meta.Stride);
|
memset(ci.second.Defaults.get(), 0, ci.second.Meta.Stride);
|
||||||
|
|
||||||
XercesDOMParser parser(nullptr, XMLPlatformUtils::fgMemoryManager);
|
XercesDOMParser parser(nullptr, XMLPlatformUtils::fgMemoryManager);
|
||||||
//parser.setErrorHandler(m_ErrorHandler);
|
parser.setErrorHandler(&errorHandler);
|
||||||
|
|
||||||
std::string componentName = ci.first;
|
std::string componentName = ci.first;
|
||||||
LOG_DEBUG("Parsing defaults for component %s", componentName.c_str());
|
LOG_DEBUG("Parsing defaults for component %s", componentName.c_str());
|
||||||
|
|||||||
Reference in New Issue
Block a user