Blob Blame History Raw
From 6a9f2161d5fa062bbb7173d63a8808eee1f9da66 Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
Date: Sun, 21 Feb 2010 00:54:52 +0100
Subject: [PATCH 2/2] Port to use xerces 3

Upgrade from 2.8 to 3.0.1.
---
 src/XmlCommon.cpp                              |    4 +
 src/XmlProcessor.cpp                           |   89 +++++++++++++++++------
 src/XmlProcessor.h                             |   34 ++++++++-
 src/probes/independent/XmlFileContentProbe.cpp |   13 ++++
 src/probes/independent/XmlFileContentProbe.h   |    6 ++
 5 files changed, 119 insertions(+), 27 deletions(-)

diff --git a/src/XmlCommon.cpp b/src/XmlCommon.cpp
index d09d4d5..a74a155 100644
--- a/src/XmlCommon.cpp
+++ b/src/XmlCommon.cpp
@@ -546,7 +546,11 @@ void XmlCommon::AddSchemaLocation(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *do
 string XmlCommon::GetNamespace(DOMElement *element) {
 
 	string xmlns = "";
+#if XERCES_VERSION_MAJOR < 3
 	xmlns = XmlCommon::ToString(element->getTypeInfo()->getNamespace());
+#else
+	xmlns = XmlCommon::ToString(element->getSchemaTypeInfo()->getTypeNamespace());
+#endif
 	if (xmlns.compare("") == 0) {
 		xmlns = "";
 	}
diff --git a/src/XmlProcessor.cpp b/src/XmlProcessor.cpp
index 2bec33e..90d8066 100644
--- a/src/XmlProcessor.cpp
+++ b/src/XmlProcessor.cpp
@@ -33,7 +33,17 @@
 //			DataDirResolver Class                                   					  //	
 //****************************************************************************************//
 
+#if XERCES_VERSION_MAJOR < 3
 DOMInputSource* DataDirResolver::resolveEntity (const XMLCh *const publicId, const XMLCh *const systemId, const XMLCh *const baseURI) {
+#else
+InputSource* DataDirResolver::resolveEntity(const XMLCh* publicId, const XMLCh* systemId)
+{
+	return NULL;
+	//return DataDirResolver::resolveEntity (publicId, systemId, NULL);
+}
+
+DOMLSInput* DataDirResolver::resolveEntity (const XMLCh *const publicId, const XMLCh *const systemId, const XMLCh *const baseURI) {
+#endif
 	
 	string path = "";
 	size_t last;
@@ -107,21 +117,36 @@ XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* XmlProcessor::ParseFile(string fileP
     // Instantiate the DOM parser.
     static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
     DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(gLS);
+#if XERCES_VERSION_MAJOR < 3
     parser = ((DOMImplementationLS*)impl)->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
+#else
+    parser = ((DOMImplementationLS*)impl)->createLSParser(DOMImplementationLS::MODE_SYNCHRONOUS, 0);
+#endif
 
 	///////////////////////////////////////////////////////
     //	Set fetuares on the builder
 	///////////////////////////////////////////////////////
 
-
-	parser->setFeature(XMLUni::fgDOMComments, false); // Discard Comment nodes in the document. 
-    parser->setFeature(XMLUni::fgDOMDatatypeNormalization, true); // Let the validation process do its datatype normalization that is defined in the used schema language.  
-	parser->setFeature(XMLUni::fgDOMNamespaces, true); //  Perform Namespace processing
-	parser->setFeature(XMLUni::fgDOMValidation, true); // Report all validation errors.  
-	parser->setFeature(XMLUni::fgXercesSchema, true); //  Enable the parser's schema support.
-	parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true); //  Enable full schema constraint checking, including checking which may be time-consuming or memory intensive. Currently, particle unique attribution constraint checking and particle derivation restriction checking are controlled by this option.  
-	parser->setFeature(XMLUni::fgXercesValidationErrorAsFatal, true); //  The parser will treat validation error as fatal and will exit  
-	parser->setFeature(XMLUni::fgXercesDOMHasPSVIInfo, true); // Enable storing of PSVI information in element and attribute nodes.
+#if XERCES_VERSION_MAJOR < 3
+#define SetParameter(parser,n,v) parser->setFeature(n,v)
+#else
+#define SetParameter(parser,n,v) parser->getDomConfig()->setParameter(n,v)
+#endif
+
+	SetParameter(parser, XMLUni::fgDOMComments, false); // Discard Comment nodes in the document. 
+    SetParameter(parser, XMLUni::fgDOMDatatypeNormalization, true); // Let the validation process do its datatype normalization that is defined in the used schema language.  
+	SetParameter(parser, XMLUni::fgDOMNamespaces, true); //  Perform Namespace processing
+#if XERCES_VERSION_MAJOR < 3
+	SetParameter(parser, XMLUni::fgDOMValidation, true); // Report all validation errors.  
+#else
+	SetParameter(parser, XMLUni::fgDOMValidate, true); // Report all validation errors.  
+#endif
+	SetParameter(parser, XMLUni::fgXercesSchema, true); //  Enable the parser's schema support.
+	SetParameter(parser, XMLUni::fgXercesSchemaFullChecking, true); //  Enable full schema constraint checking, including checking which may be time-consuming or memory intensive. Currently, particle unique attribution constraint checking and particle derivation restriction checking are controlled by this option.  
+	SetParameter(parser, XMLUni::fgXercesValidationErrorAsFatal, true); //  The parser will treat validation error as fatal and will exit  
+	SetParameter(parser, XMLUni::fgXercesDOMHasPSVIInfo, true); // Enable storing of PSVI information in element and attribute nodes.
+
+#undef SetParameter
 
 	///////////////////////////////////////////////////////
 //****************************************************************************************//
@@ -129,7 +154,11 @@ XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* XmlProcessor::ParseFile(string fileP
 //****************************************************************************************//
 	/* Look for XML schemas in local directory instead of Internet */
 		DataDirResolver resolver;
+#if XERCES_VERSION_MAJOR < 3
 		parser->setEntityResolver (&resolver);
+#else
+		parser->getDomConfig()->setParameter(XMLUni::fgXercesEntityResolver, &resolver);
+#endif
 //****************************************************************************************//
 //			End of air-gap code															  //	
 //****************************************************************************************//
@@ -140,7 +169,11 @@ XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* XmlProcessor::ParseFile(string fileP
 	// Create a new DOMErrorHandler
 	// and set it to the builder
 	XmlProcessorErrorHandler *errHandler = new XmlProcessorErrorHandler();
+#if XERCES_VERSION_MAJOR < 3
 	parser->setErrorHandler(errHandler);
+#else
+	parser->getDomConfig()->setParameter(XMLUni::fgDOMErrorHandler, errHandler);
+#endif
 
     try  {
 		// reset document pool
@@ -206,23 +239,27 @@ void XmlProcessor::WriteDOMDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*
 		XMLCh tempStr[100];
 		XMLString::transcode("LS", tempStr, 99);
 		DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
+#if XERCES_VERSION_MAJOR < 3
 		DOMWriter *theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
-
+#else
+		DOMLSSerializer *theSerializer = ((DOMImplementationLS*)impl)->createLSSerializer();
+#endif
+
+#if XERCES_VERSION_MAJOR < 3
+#define SetParameter(serializer,n,v) if (serializer->canSetFeature(n,v)) \
+	serializer->setFeature(n,v)
+#else
+#define SetParameter(serializer,n,v) if (serializer->getDomConfig()->canSetParameter(n,v)) \
+	serializer->getDomConfig()->setParameter(n,v)
+#endif
 		// set feature if the serializer supports the feature/mode
-		if (theSerializer->canSetFeature(XMLUni::fgDOMWRTSplitCdataSections, true))
-			theSerializer->setFeature(XMLUni::fgDOMWRTSplitCdataSections, true);
-
-		if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true))
-			theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true);
-
-		if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
-			theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
-
-		if (theSerializer->canSetFeature(XMLUni::fgDOMWRTBOM, false))
-			theSerializer->setFeature(XMLUni::fgDOMWRTBOM, false);
+		SetParameter(theSerializer, XMLUni::fgDOMWRTSplitCdataSections, true);
+		SetParameter(theSerializer, XMLUni::fgDOMWRTDiscardDefaultContent, true);
+		SetParameter(theSerializer, XMLUni::fgDOMWRTFormatPrettyPrint, true);
+		SetParameter(theSerializer, XMLUni::fgDOMWRTBOM, false);
+		//SetParameter(theSerializer, XMLUni::fgDOMWRTBOM, true);
 
-		//if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true))
-		//	theSerializer->setFeature(XMLUni::fgDOMWRTBOM, true);
+#undef SetParameter
 
 		//
 		// Plug in a format target to receive the resultant
@@ -240,7 +277,13 @@ void XmlProcessor::WriteDOMDocument(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument*
 		//
 		// do the serialization through DOMWriter::writeNode();
 		//
+#if XERCES_VERSION_MAJOR < 3
 		theSerializer->writeNode(myFormTarget, *doc);
+#else
+		DOMLSOutput *output = ((DOMImplementationLS*)impl)->createLSOutput();
+		output->setByteStream(myFormTarget);
+		theSerializer->write(doc, output);
+#endif
 
 		delete theSerializer;
 		delete myFormTarget;
diff --git a/src/XmlProcessor.h b/src/XmlProcessor.h
index faa7e2e..84ec4e3 100644
--- a/src/XmlProcessor.h
+++ b/src/XmlProcessor.h
@@ -39,8 +39,11 @@
 #include "Common.h" 
 
 //	required xerces	includes
-#include <xercesc/dom/DOMImplementationRegistry.hpp>
+#if XERCES_VERSION_MAJOR < 3
 #include <xercesc/dom/DOMBuilder.hpp>
+#else
+#endif
+#include <xercesc/dom/DOMImplementationRegistry.hpp>
 #include <xercesc/dom/DOMException.hpp>
 #include <xercesc/dom/DOMErrorHandler.hpp>
 #include <xercesc/dom/DOMError.hpp>
@@ -48,17 +51,26 @@
 #include <xercesc/dom/DOMNamedNodeMap.hpp>
 
 // for dom Writer
+#if XERCES_VERSION_MAJOR < 3
+#include <xercesc/dom/DOMWriter.hpp>
+#else
+#endif
 #include <xercesc/dom/DOMImplementation.hpp>
 #include <xercesc/dom/DOMImplementationLS.hpp>
-#include <xercesc/dom/DOMWriter.hpp>
 #include <xercesc/framework/StdOutFormatTarget.hpp>
 #include <xercesc/framework/LocalFileFormatTarget.hpp>
 #include <xercesc/parsers/XercesDOMParser.hpp>
 #include <xercesc/util/XMLUni.hpp>
 
 // for entity resolver
+#if XERCES_VERSION_MAJOR < 3
 #include <xercesc/dom/DOMEntityResolver.hpp>
 #include <xercesc/dom/DOMInputSource.hpp>
+#else
+#include <xercesc/sax/EntityResolver.hpp>
+#include <xercesc/sax/InputSource.hpp>
+#include <xercesc/sax2/SAX2XMLReader.hpp>
+#endif
 #include <xercesc/framework/LocalFileInputSource.hpp>
 #include <xercesc/framework/Wrapper4InputSource.hpp>
 
@@ -68,15 +80,24 @@ using namespace	std;
 
 
 /** 
-	This class extends the default DOMEntityResolver and implments the resolve entity method 
+	This class extends the default EntityResolver and implments the resolve entity method 
 	to support 
 */
+#if XERCES_VERSION_MAJOR < 3
 class DataDirResolver : public DOMEntityResolver {
+#else
+class DataDirResolver : public EntityResolver {
+#endif
 public:
 	/**
      *     
 	*/
+#if XERCES_VERSION_MAJOR < 3
 	DOMInputSource *resolveEntity (const XMLCh *const publicId, const XMLCh *const systemId, const XMLCh *const baseURI);
+#else
+	InputSource *resolveEntity (const XMLCh *const publicId, const XMLCh *const systemId);
+	DOMLSInput *resolveEntity (const XMLCh *const publicId, const XMLCh *const systemId, const XMLCh *const baseURI);
+#endif
 };
 
 /**
@@ -115,8 +136,13 @@ private:
 	XmlProcessor();
 
 	static XmlProcessor* instance;
-	
+
+#if XERCES_VERSION_MAJOR < 3	
 	DOMBuilder *parser;
+#else
+	//SAX2XMLReader *parser;
+	DOMLSParser *parser;
+#endif
 };
 
 /** 
diff --git a/src/probes/independent/XmlFileContentProbe.cpp b/src/probes/independent/XmlFileContentProbe.cpp
index b595fcb..74c763f 100644
--- a/src/probes/independent/XmlFileContentProbe.cpp
+++ b/src/probes/independent/XmlFileContentProbe.cpp
@@ -417,12 +417,25 @@ BinInputStream* DummyEntityResolver::NoOpInputSource::makeStream() const
     return new DummyEntityResolver::DoNothingBinInputStream();
 }
 
+#if XERCES_VERSION_MAJOR < 3
 unsigned int DummyEntityResolver::DoNothingBinInputStream::curPos() const
+#else
+const XMLCh* DummyEntityResolver::DoNothingBinInputStream::getContentType() const
+{
+    return NULL;
+}
+
+XMLFilePos DummyEntityResolver::DoNothingBinInputStream::curPos() const
+#endif
 {
     return 0;
 }
 
+#if XERCES_VERSION_MAJOR < 3
 unsigned int DummyEntityResolver::DoNothingBinInputStream::readBytes(XMLByte *const toFill, const unsigned int maxToRead)
+#else
+XMLSize_t DummyEntityResolver::DoNothingBinInputStream::readBytes(XMLByte *const toFill, XMLSize_t maxToRead)
+#endif
 {
     return 0;
 }
diff --git a/src/probes/independent/XmlFileContentProbe.h b/src/probes/independent/XmlFileContentProbe.h
index d498718..733a1a4 100644
--- a/src/probes/independent/XmlFileContentProbe.h
+++ b/src/probes/independent/XmlFileContentProbe.h
@@ -135,8 +135,14 @@ private:
     class DoNothingBinInputStream : public BinInputStream
     {
     public:
+#if XERCES_VERSION_MAJOR < 3
         virtual unsigned int curPos() const;
         virtual unsigned int readBytes(XMLByte *const toFill, const unsigned int maxToRead);
+#else
+	virtual XMLFilePos curPos() const;
+	virtual const XMLCh* getContentType() const;
+        virtual XMLSize_t readBytes(XMLByte *const toFill, XMLSize_t maxToRead);
+#endif
     };
 };
 
-- 
1.7.0