diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IcePack/ComponentBuilder.cpp | 3 | ||||
-rw-r--r-- | cpp/src/IcePack/ComponentBuilder.h | 2 | ||||
-rw-r--r-- | cpp/src/IcePack/IcePackNode.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IcePack/IcePackRegistry.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConfigParser.cpp | 155 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConfigParser.h | 29 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConfigParserErrorReporter.cpp | 54 | ||||
-rw-r--r-- | cpp/src/IceSSL/ConfigParserErrorReporter.h | 20 | ||||
-rw-r--r-- | cpp/src/IceSSL/icessl.dsp | 4 | ||||
-rw-r--r-- | cpp/src/IceStorm/Admin.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IceStorm/WeightedGraph.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceStorm/icestormC.dsp | 4 | ||||
-rw-r--r-- | cpp/src/IceXML/StreamI.cpp | 294 | ||||
-rw-r--r-- | cpp/src/IceXML/icexml.dsp | 4 | ||||
-rw-r--r-- | cpp/src/XMLTransform/ErrorReporter.cpp | 16 | ||||
-rw-r--r-- | cpp/src/XMLTransform/ErrorReporter.h | 7 | ||||
-rw-r--r-- | cpp/src/XMLTransform/XMLTransform.cpp | 541 | ||||
-rw-r--r-- | cpp/src/XMLTransform/xmltransform.dsp | 4 | ||||
-rw-r--r-- | cpp/src/Yellow/yellowC.dsp | 4 | ||||
-rw-r--r-- | cpp/src/slice2xsd/Validate.cpp | 65 |
20 files changed, 598 insertions, 618 deletions
diff --git a/cpp/src/IcePack/ComponentBuilder.cpp b/cpp/src/IcePack/ComponentBuilder.cpp index 0dd68963fb4..6346cbc4bea 100644 --- a/cpp/src/IcePack/ComponentBuilder.cpp +++ b/cpp/src/IcePack/ComponentBuilder.cpp @@ -12,8 +12,7 @@ #include <IcePack/ComponentBuilder.h> #include <Yellow/Yellow.h> -#include <parsers/SAXParser.hpp> -#include <sax/HandlerBase.hpp> +#include <xercesc/parsers/SAXParser.hpp> #include <sys/stat.h> #include <sys/types.h> diff --git a/cpp/src/IcePack/ComponentBuilder.h b/cpp/src/IcePack/ComponentBuilder.h index c6f0799539f..90b15a537b4 100644 --- a/cpp/src/IcePack/ComponentBuilder.h +++ b/cpp/src/IcePack/ComponentBuilder.h @@ -15,7 +15,7 @@ #include <IcePack/Admin.h> #include <Yellow/Yellow.h> -#include <sax/HandlerBase.hpp> +#include <xercesc/sax/HandlerBase.hpp> #include <map> #include <vector> diff --git a/cpp/src/IcePack/IcePackNode.cpp b/cpp/src/IcePack/IcePackNode.cpp index 392cd8199e4..ff00477bb42 100644 --- a/cpp/src/IcePack/IcePackNode.cpp +++ b/cpp/src/IcePack/IcePackNode.cpp @@ -20,7 +20,7 @@ #include <IcePack/NodeInfo.h> #include <IcePack/TraceLevels.h> #include <IcePack/Registry.h> -#include <util/PlatformUtils.hpp> +#include <xercesc/util/PlatformUtils.hpp> #include <csignal> #include <signal.h> diff --git a/cpp/src/IcePack/IcePackRegistry.cpp b/cpp/src/IcePack/IcePackRegistry.cpp index a49fb795252..1b824694ab5 100644 --- a/cpp/src/IcePack/IcePackRegistry.cpp +++ b/cpp/src/IcePack/IcePackRegistry.cpp @@ -13,7 +13,7 @@ #include <Ice/Application.h> #include <IcePack/Registry.h> -#include <util/PlatformUtils.hpp> +#include <xercesc/util/PlatformUtils.hpp> using namespace std; using namespace IcePack; diff --git a/cpp/src/IceSSL/ConfigParser.cpp b/cpp/src/IceSSL/ConfigParser.cpp index 124d51b4069..87620277ff4 100644 --- a/cpp/src/IceSSL/ConfigParser.cpp +++ b/cpp/src/IceSSL/ConfigParser.cpp @@ -13,10 +13,10 @@ #include <IceSSL/OpenSSL.h> #include <IceSSL/Exception.h> -#include <util/PlatformUtils.hpp> -#include <parsers/DOMParser.hpp> -#include <framework/LocalFileInputSource.hpp> -#include <util/Janitor.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/parsers/XercesDOMParser.hpp> +#include <xercesc/framework/LocalFileInputSource.hpp> +#include <xercesc/util/Janitor.hpp> #include <algorithm> @@ -28,6 +28,7 @@ using namespace IceSSL; // IceSSL::ConfigParser::ConfigParser(const string& configFile) : + _root(0), _configFile(configFile) { assert(!configFile.empty()); @@ -37,6 +38,7 @@ IceSSL::ConfigParser::ConfigParser(const string& configFile) : } IceSSL::ConfigParser::ConfigParser(const string& configFile, const string& configPath) : + _root(0), _configFile(configFile), _configPath(configPath) { @@ -48,6 +50,11 @@ IceSSL::ConfigParser::ConfigParser(const string& configFile, const string& confi IceSSL::ConfigParser::~ConfigParser() { + if(_root) + { + _root->release(); + } + XMLPlatformUtils::Terminate(); } @@ -64,7 +71,7 @@ IceSSL::ConfigParser::process() ostringstream s; s << "while parsing " << _configFile << ": " << endl; - s << "xerces-c init exception: " << DOMString(toCatch.getMessage()); + s << "xerces-c init exception: " << toString(toCatch.getMessage()); configEx.message = s.str(); @@ -73,19 +80,17 @@ IceSSL::ConfigParser::process() int errorCount = 0; - ConfigParserErrorReporterPtr errReporter = new ConfigParserErrorReporter(_traceLevels, _logger); - assert(errReporter != 0); + ConfigParserErrorReporter errReporter(_traceLevels, _logger); // Create our parser, then attach an error handler to the parser. // The parser will call back to methods of the ConfigParserErrorHandler // if it discovers errors during the course of parsing the XML document. - DOMParser parser; - parser.setValidationScheme(DOMParser::Val_Auto); + XercesDOMParser parser; + parser.setValidationScheme(AbstractDOMParser::Val_Auto); parser.setDoNamespaces(false); parser.setDoSchema(false); parser.setCreateEntityReferenceNodes(false); - parser.setToCreateXMLDeclTypeNode(true); - parser.setErrorHandler(errReporter.get()); + parser.setErrorHandler(&errReporter); try { @@ -118,7 +123,7 @@ IceSSL::ConfigParser::process() if(errorCount == 0) { // Get the root of the parse tree. - _root = parser.getDocument(); + _root = parser.adoptDocument(); } } catch(const XMLException& e) @@ -127,13 +132,13 @@ IceSSL::ConfigParser::process() ostringstream s; s << "while parsing " << _configFile << ": " << endl; - s << "xerces-c parsing error: " << DOMString(e.getMessage()); + s << "xerces-c parsing error: " << toString(e.getMessage()); configEx.message = s.str(); throw configEx; } - catch(const DOM_DOMException& e) + catch(const DOMException& e) { ConfigParseException configEx(__FILE__, __LINE__); @@ -165,7 +170,7 @@ IceSSL::ConfigParser::process() configEx.message = errStr.str(); - string reporterErrors = errReporter->getErrors(); + string reporterErrors = errReporter.getErrors(); if(!reporterErrors.empty()) { @@ -183,7 +188,7 @@ IceSSL::ConfigParser::loadClientConfig(GeneralConfig& general, BaseCertificates& baseCerts) { string clientSectionString("SSLConfig:client"); - DOM_Node clientSection = find(clientSectionString); + DOMNode* clientSection = find(clientSectionString); try { @@ -196,7 +201,7 @@ IceSSL::ConfigParser::loadClientConfig(GeneralConfig& general, return true; } } - catch(const DOM_DOMException& e) + catch(const DOMException& e) { ConfigParseException configEx(__FILE__, __LINE__); @@ -220,7 +225,7 @@ IceSSL::ConfigParser::loadServerConfig(GeneralConfig& general, TempCertificates& tempCerts) { string serverSectionString("SSLConfig:server"); - DOM_Node serverSection = find(serverSectionString); + DOMNode* serverSection = find(serverSectionString); try { @@ -234,7 +239,7 @@ IceSSL::ConfigParser::loadServerConfig(GeneralConfig& general, return true; } } - catch(const DOM_DOMException& e) + catch(const DOMException& e) { ConfigParseException configEx(__FILE__, __LINE__); @@ -297,17 +302,17 @@ IceSSL::ConfigParser::popRoot(string& path, string& root, string& tail) } } -DOM_Node +DOMNode* IceSSL::ConfigParser::find(string& nodePath) { return find(_root, nodePath); } -DOM_Node -IceSSL::ConfigParser::find(DOM_Node rootNode, string& nodePath) +DOMNode* +IceSSL::ConfigParser::find(DOMNode* rootNode, string& nodePath) { // The target node that we're looking for. - DOM_Node tNode; + DOMNode* tNode = 0; if(rootNode == 0) { @@ -320,14 +325,14 @@ IceSSL::ConfigParser::find(DOM_Node rootNode, string& nodePath) // Pop the root off the path. popRoot(nodePath, rootNodeName, tailNodes); - DOM_Node child = rootNode.getFirstChild(); + DOMNode* child = rootNode->getFirstChild(); while(child != 0) { // Ignore any other node types - we're only interested in ELEMENT_NODEs. - if(child.getNodeType() == DOM_Node::ELEMENT_NODE) + if(child->getNodeType() == DOMNode::ELEMENT_NODE) { - string nodeName = toString(child.getNodeName()); + string nodeName = toString(child->getNodeName()); if(nodeName.compare(rootNodeName) == 0) { @@ -344,14 +349,14 @@ IceSSL::ConfigParser::find(DOM_Node rootNode, string& nodePath) } } - child = child.getNextSibling(); + child = child->getNextSibling(); } return tNode; } void -IceSSL::ConfigParser::getGeneral(DOM_Node rootNode, GeneralConfig& generalConfig) +IceSSL::ConfigParser::getGeneral(DOMNode* rootNode, GeneralConfig& generalConfig) { if(rootNode == 0) { @@ -359,17 +364,17 @@ IceSSL::ConfigParser::getGeneral(DOM_Node rootNode, GeneralConfig& generalConfig } string generalString("general"); - DOM_Node general = find(rootNode, generalString); + DOMNode* general = find(rootNode, generalString); - DOM_NamedNodeMap attributes = general.getAttributes(); + DOMNamedNodeMap* attributes = general->getAttributes(); - int attrCount = attributes.getLength(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string nodeName = toString(attribute.getNodeName()); - string nodeValue = toString(attribute.getNodeValue()); + DOMNode* attribute = attributes->item(i); + string nodeName = toString(attribute->getNodeName()); + string nodeValue = toString(attribute->getNodeValue()); // Set the property. generalConfig.set(nodeName, nodeValue); @@ -377,7 +382,7 @@ IceSSL::ConfigParser::getGeneral(DOM_Node rootNode, GeneralConfig& generalConfig } void -IceSSL::ConfigParser::getCertAuth(DOM_Node rootNode, CertificateAuthority& certAuth) +IceSSL::ConfigParser::getCertAuth(DOMNode* rootNode, CertificateAuthority& certAuth) { if(rootNode == 0) { @@ -385,22 +390,22 @@ IceSSL::ConfigParser::getCertAuth(DOM_Node rootNode, CertificateAuthority& certA } string nodeName = "certauthority"; - DOM_Node certAuthNode = find(rootNode, nodeName); + DOMNode* certAuthNode = find(rootNode, nodeName); if(certAuthNode == 0) { return; } - DOM_NamedNodeMap attributes = certAuthNode.getAttributes(); + DOMNamedNodeMap* attributes = certAuthNode->getAttributes(); - int attrCount = attributes.getLength(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string nodeName = toString(attribute.getNodeName()); - string nodeValue = toString(attribute.getNodeValue()); + DOMNode* attribute = attributes->item(i); + string nodeName = toString(attribute->getNodeName()); + string nodeValue = toString(attribute->getNodeValue()); if(nodeName.compare("file") == 0) { @@ -422,7 +427,7 @@ IceSSL::ConfigParser::getCertAuth(DOM_Node rootNode, CertificateAuthority& certA } void -IceSSL::ConfigParser::getBaseCerts(DOM_Node rootNode, BaseCertificates& baseCerts) +IceSSL::ConfigParser::getBaseCerts(DOMNode* rootNode, BaseCertificates& baseCerts) { if(rootNode == 0) { @@ -430,7 +435,7 @@ IceSSL::ConfigParser::getBaseCerts(DOM_Node rootNode, BaseCertificates& baseCert } string nodeName = "basecerts"; - DOM_Node baseCertsRoot = find(rootNode, nodeName); + DOMNode* baseCertsRoot = find(rootNode, nodeName); if(baseCertsRoot == 0) { @@ -454,7 +459,7 @@ IceSSL::ConfigParser::getBaseCerts(DOM_Node rootNode, BaseCertificates& baseCert } void -IceSSL::ConfigParser::getTempCerts(DOM_Node rootNode, TempCertificates& tempCerts) +IceSSL::ConfigParser::getTempCerts(DOMNode* rootNode, TempCertificates& tempCerts) { if(rootNode == 0) { @@ -462,19 +467,18 @@ IceSSL::ConfigParser::getTempCerts(DOM_Node rootNode, TempCertificates& tempCert } string nodeName = "tempcerts"; - DOM_Node tempCertsRoot = find(rootNode, nodeName); + DOMNode* tempCertsRoot = find(rootNode, nodeName); if(tempCertsRoot == 0) { return; } - DOM_Node child = tempCertsRoot.getFirstChild(); + DOMNode* child = tempCertsRoot->getFirstChild(); while(child != 0) { - DOMString nodeName = child.getNodeName(); - string name = toString(nodeName); + string name = toString(child->getNodeName()); if(name.compare("dhparams") == 0) { @@ -485,12 +489,12 @@ IceSSL::ConfigParser::getTempCerts(DOM_Node rootNode, TempCertificates& tempCert loadRSACert(child, tempCerts); } - child = child.getNextSibling(); + child = child->getNextSibling(); } } void -IceSSL::ConfigParser::loadDHParams(DOM_Node rootNode, TempCertificates& tempCerts) +IceSSL::ConfigParser::loadDHParams(DOMNode* rootNode, TempCertificates& tempCerts) { DiffieHellmanParamsFile dhParams; @@ -500,7 +504,7 @@ IceSSL::ConfigParser::loadDHParams(DOM_Node rootNode, TempCertificates& tempCert } void -IceSSL::ConfigParser::loadRSACert(DOM_Node rootNode, TempCertificates& tempCerts) +IceSSL::ConfigParser::loadRSACert(DOMNode* rootNode, TempCertificates& tempCerts) { CertificateDesc rsaCert; @@ -510,7 +514,7 @@ IceSSL::ConfigParser::loadRSACert(DOM_Node rootNode, TempCertificates& tempCerts } void -IceSSL::ConfigParser::getCert(DOM_Node rootNode, CertificateDesc& certDesc) +IceSSL::ConfigParser::getCert(DOMNode* rootNode, CertificateDesc& certDesc) { if(rootNode == 0) { @@ -521,14 +525,14 @@ IceSSL::ConfigParser::getCert(DOM_Node rootNode, CertificateDesc& certDesc) CertificateFile privateFile; int keySize = 0; - DOM_NamedNodeMap attributes = rootNode.getAttributes(); - int attrCount = attributes.getLength(); + DOMNamedNodeMap* attributes = rootNode->getAttributes(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string nodeName = toString(attribute.getNodeName()); - string nodeValue = toString(attribute.getNodeValue()); + DOMNode* attribute = attributes->item(i); + string nodeName = toString(attribute->getNodeName()); + string nodeValue = toString(attribute->getNodeValue()); if(nodeName.compare("keysize") == 0) { @@ -547,7 +551,7 @@ IceSSL::ConfigParser::getCert(DOM_Node rootNode, CertificateDesc& certDesc) } void -IceSSL::ConfigParser::getDHParams(DOM_Node rootNode, DiffieHellmanParamsFile& dhParams) +IceSSL::ConfigParser::getDHParams(DOMNode* rootNode, DiffieHellmanParamsFile& dhParams) { if(rootNode == 0) { @@ -557,15 +561,15 @@ IceSSL::ConfigParser::getDHParams(DOM_Node rootNode, DiffieHellmanParamsFile& dh CertificateFile certFile; loadCertificateFile(rootNode, certFile); - DOM_NamedNodeMap attributes = rootNode.getAttributes(); + DOMNamedNodeMap* attributes = rootNode->getAttributes(); int keySize = 0; - int attrCount = attributes.getLength(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string nodeName = toString(attribute.getNodeName()); - string nodeValue = toString(attribute.getNodeValue()); + DOMNode* attribute = attributes->item(i); + string nodeName = toString(attribute->getNodeName()); + string nodeValue = toString(attribute->getNodeValue()); if(nodeName.compare("keysize") == 0) { @@ -577,7 +581,7 @@ IceSSL::ConfigParser::getDHParams(DOM_Node rootNode, DiffieHellmanParamsFile& dh } void -IceSSL::ConfigParser::loadCertificateFile(DOM_Node rootNode, CertificateFile& certFile) +IceSSL::ConfigParser::loadCertificateFile(DOMNode* rootNode, CertificateFile& certFile) { if(rootNode == 0) { @@ -587,14 +591,14 @@ IceSSL::ConfigParser::loadCertificateFile(DOM_Node rootNode, CertificateFile& ce string filename; int encoding = 0; // Initialize, to keep the compiler from complaining. - DOM_NamedNodeMap attributes = rootNode.getAttributes(); - int attrCount = attributes.getLength(); + DOMNamedNodeMap* attributes = rootNode->getAttributes(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string nodeName = toString(attribute.getNodeName()); - string nodeValue = toString(attribute.getNodeValue()); + DOMNode* attribute = attributes->item(i); + string nodeName = toString(attribute->getNodeName()); + string nodeValue = toString(attribute->getNodeValue()); if(nodeName.compare("encoding") == 0) { @@ -633,14 +637,11 @@ IceSSL::ConfigParser::parseEncoding(string& encodingString) } string -IceSSL::ConfigParser::toString(const DOMString& domString) +IceSSL::ConfigParser::toString(const XMLCh* s) { - char* cString = domString.transcode(); - - string stlString(cString); - - delete []cString; - - return stlString; + char* t = XMLString::transcode(s); + string r(t); + delete[] t; + return r; } diff --git a/cpp/src/IceSSL/ConfigParser.h b/cpp/src/IceSSL/ConfigParser.h index 5f56d020262..02f4f762836 100644 --- a/cpp/src/IceSSL/ConfigParser.h +++ b/cpp/src/IceSSL/ConfigParser.h @@ -18,7 +18,8 @@ #include <IceSSL/BaseCerts.h> #include <IceSSL/TempCerts.h> #include <IceSSL/TraceLevelsF.h> -#include <dom/DOM.hpp> + +#include <xercesc/dom/DOM.hpp> namespace IceSSL { @@ -48,7 +49,7 @@ public: private: - DOM_Node _root; + DOMNode* _root; std::string _configFile; std::string _configPath; @@ -57,31 +58,31 @@ private: // Parse tree walking utility methods. void popRoot(std::string&, std::string&, std::string&); - DOM_Node find(std::string&); - DOM_Node find(DOM_Node, std::string&); + DOMNode* find(std::string&); + DOMNode* find(DOMNode*, std::string&); // Loading of the base elements of the file. - void getGeneral(DOM_Node, GeneralConfig&); - void getCertAuth(DOM_Node, CertificateAuthority&); - void getBaseCerts(DOM_Node, BaseCertificates&); - void getTempCerts(DOM_Node, TempCertificates&); + void getGeneral(DOMNode*, GeneralConfig&); + void getCertAuth(DOMNode*, CertificateAuthority&); + void getBaseCerts(DOMNode*, BaseCertificates&); + void getTempCerts(DOMNode*, TempCertificates&); // Loading of temporary certificates/params (Ephemeral Keys). - void loadDHParams(DOM_Node, TempCertificates&); - void loadRSACert(DOM_Node, TempCertificates&); + void loadDHParams(DOMNode*, TempCertificates&); + void loadRSACert(DOMNode*, TempCertificates&); // Populate with information from the indicated node in the parse tree. - void getCert(DOM_Node, CertificateDesc&); - void getDHParams(DOM_Node, DiffieHellmanParamsFile&); + void getCert(DOMNode*, CertificateDesc&); + void getDHParams(DOMNode*, DiffieHellmanParamsFile&); // Populate a certificate file object, basis of all certificates. - void loadCertificateFile(DOM_Node, CertificateFile&); + void loadCertificateFile(DOMNode*, CertificateFile&); // Parses the certificate encoding format from a string representation // to the proper integer value used by the underlying SSL framework. int parseEncoding(std::string&); - std::string toString(const DOMString&); + std::string toString(const XMLCh*); }; } diff --git a/cpp/src/IceSSL/ConfigParserErrorReporter.cpp b/cpp/src/IceSSL/ConfigParserErrorReporter.cpp index 21dcb82d9e0..a73284cdead 100644 --- a/cpp/src/IceSSL/ConfigParserErrorReporter.cpp +++ b/cpp/src/IceSSL/ConfigParserErrorReporter.cpp @@ -13,14 +13,23 @@ #include <IceSSL/OpenSSL.h> #include <IceSSL/TraceLevels.h> -#include <sax/SAXParseException.hpp> +#include <xercesc/sax/SAXParseException.hpp> #include <sstream> using namespace std; -void ::IceInternal::incRef(::IceSSL::ConfigParserErrorReporter* p) { p->__incRef(); } -void ::IceInternal::decRef(::IceSSL::ConfigParserErrorReporter* p) { p->__decRef(); } +// +// Utility to make the usage of xerces easier. +// +static string +toString(const XMLCh* s) +{ + char* t = XMLString::transcode(s); + string r(t); + delete[] t; + return r; +} IceSSL::ConfigParserErrorReporter::ConfigParserErrorReporter(const IceSSL::TraceLevelsPtr& traceLevels, const Ice::LoggerPtr& logger) : @@ -41,11 +50,11 @@ IceSSL::ConfigParserErrorReporter::warning(const SAXParseException& toCatch) { ostringstream s; - s << "ssl configuration file parse error" << endl; - s << DOMString(toCatch.getSystemId()); - s << ", line " << toCatch.getLineNumber(); - s << ", column " << toCatch.getColumnNumber() << endl; - s << "Message " << DOMString(toCatch.getMessage()) << endl; + s << "ssl configuration file parse error" << endl + << toString(toCatch.getSystemId()) + << ", line " << toCatch.getLineNumber() + << ", column " << toCatch.getColumnNumber() << endl + << "Message " << toString(toCatch.getMessage()) << endl; _logger->trace(_traceLevels->securityCat, "PWN " + s.str()); } @@ -56,11 +65,11 @@ IceSSL::ConfigParserErrorReporter::error(const SAXParseException& toCatch) { _errorCount++; - _errors << "ssl configuration file parse error" << endl; - _errors << " " << DOMString(toCatch.getSystemId()); - _errors << ", line " << toCatch.getLineNumber(); - _errors << ", column " << toCatch.getColumnNumber() << endl; - _errors << " " << "Message " << DOMString(toCatch.getMessage()) << endl; + _errors << "ssl configuration file parse error" << endl + << " " << toString(toCatch.getSystemId()) + << ", line " << toCatch.getLineNumber() + << ", column " << toCatch.getColumnNumber() << endl + << " " << "Message " << toString(toCatch.getMessage()) << endl; } void @@ -68,11 +77,11 @@ IceSSL::ConfigParserErrorReporter::fatalError(const SAXParseException& toCatch) { _errorCount++; - _errors << "ssl configuration file parse error" << endl; - _errors << " " << DOMString(toCatch.getSystemId()); - _errors << ", line " << toCatch.getLineNumber(); - _errors << ", column " << toCatch.getColumnNumber() << endl; - _errors << " " << "Message " << DOMString(toCatch.getMessage()) << endl; + _errors << "ssl configuration file parse error" << endl + << " " << toString(toCatch.getSystemId()) + << ", line " << toCatch.getLineNumber() + << ", column " << toCatch.getColumnNumber() << endl + << " " << "Message " << toString(toCatch.getMessage()) << endl; } void @@ -92,12 +101,3 @@ IceSSL::ConfigParserErrorReporter::getErrors() const { return _errors.str(); } - -std::ostream& -IceSSL::operator << (std::ostream& target, const DOMString& s) -{ - char *p = s.transcode(); - target << p; - delete [] p; - return target; -} diff --git a/cpp/src/IceSSL/ConfigParserErrorReporter.h b/cpp/src/IceSSL/ConfigParserErrorReporter.h index cc6d02ed7d1..2d49844caf2 100644 --- a/cpp/src/IceSSL/ConfigParserErrorReporter.h +++ b/cpp/src/IceSSL/ConfigParserErrorReporter.h @@ -13,14 +13,14 @@ #include <Ice/LoggerF.h> #include <IceSSL/TraceLevelsF.h> -#include <util/XercesDefs.hpp> -#include <dom/DOMString.hpp> -#include <sax/ErrorHandler.hpp> + +//#include <xercesc/util/XercesDefs.hpp> +#include <xercesc/sax/ErrorHandler.hpp> namespace IceSSL { -class ConfigParserErrorReporter : public ErrorHandler, public IceUtil::Shared +class ConfigParserErrorReporter : public ErrorHandler { public: @@ -46,18 +46,6 @@ private: int _errorCount; }; -typedef IceInternal::Handle<ConfigParserErrorReporter> ConfigParserErrorReporterPtr; - -std::ostream& operator << (std::ostream& target, const DOMString& s); - -} - -namespace IceInternal -{ - -void incRef(::IceSSL::ConfigParserErrorReporter*); -void decRef(::IceSSL::ConfigParserErrorReporter*); - } #endif diff --git a/cpp/src/IceSSL/icessl.dsp b/cpp/src/IceSSL/icessl.dsp index d9d08ffd030..f663e9c462a 100644 --- a/cpp/src/IceSSL/icessl.dsp +++ b/cpp/src/IceSSL/icessl.dsp @@ -54,7 +54,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ws2_32.lib libeay32.lib ssleay32.lib xerces-c_1.lib /nologo /dll /machine:I386 /out:"Release/icessl001.dll"
+# ADD LINK32 ws2_32.lib libeay32.lib ssleay32.lib xerces-c_2.lib /nologo /dll /machine:I386 /out:"Release/icessl001.dll"
# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -86,7 +86,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 ws2_32.lib libeay32.lib ssleay32.lib xerces-c_1D.lib /nologo /dll /debug /machine:I386 /out:"Debug/icessl001d.dll" /pdbtype:sept
+# ADD LINK32 ws2_32.lib libeay32.lib ssleay32.lib xerces-c_2D.lib /nologo /dll /debug /machine:I386 /out:"Debug/icessl001d.dll" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
diff --git a/cpp/src/IceStorm/Admin.cpp b/cpp/src/IceStorm/Admin.cpp index c06a44b304b..a0bcd06acff 100644 --- a/cpp/src/IceStorm/Admin.cpp +++ b/cpp/src/IceStorm/Admin.cpp @@ -10,7 +10,7 @@ #include <Ice/Application.h> #include <IceStorm/Parser.h> -#include <util/PlatformUtils.hpp> +#include <xercesc/util/PlatformUtils.hpp> #include <fstream> using namespace std; diff --git a/cpp/src/IceStorm/WeightedGraph.cpp b/cpp/src/IceStorm/WeightedGraph.cpp index ab7a0208e95..d27c7b4b704 100644 --- a/cpp/src/IceStorm/WeightedGraph.cpp +++ b/cpp/src/IceStorm/WeightedGraph.cpp @@ -9,8 +9,8 @@ // ********************************************************************** #include <IceStorm/WeightedGraph.h> -#include <parsers/SAXParser.hpp> -#include <sax/HandlerBase.hpp> +#include <xercesc/parsers/SAXParser.hpp> +#include <xercesc/sax/HandlerBase.hpp> #include <map> #include <list> #include <iostream> diff --git a/cpp/src/IceStorm/icestormC.dsp b/cpp/src/IceStorm/icestormC.dsp index f856704d4c7..7fa3d181e32 100644 --- a/cpp/src/IceStorm/icestormC.dsp +++ b/cpp/src/IceStorm/icestormC.dsp @@ -51,7 +51,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 setargv.obj xerces-c_1.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/icestormadmin.exe" /libpath:"../../../lib"
+# ADD LINK32 setargv.obj xerces-c_2.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/icestormadmin.exe" /libpath:"../../../lib"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "IceStormC - Win32 Debug"
@@ -77,7 +77,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 setargv.obj xerces-c_1D.lib /nologo /subsystem:console /debug /machine:I386 /out:"../../bin/icestormadmin.exe" /pdbtype:sept /libpath:"../../../lib"
+# ADD LINK32 setargv.obj xerces-c_2D.lib /nologo /subsystem:console /debug /machine:I386 /out:"../../bin/icestormadmin.exe" /pdbtype:sept /libpath:"../../../lib"
# SUBTRACT LINK32 /nodefaultlib
!ENDIF
diff --git a/cpp/src/IceXML/StreamI.cpp b/cpp/src/IceXML/StreamI.cpp index fa474a535de..0dd8abaa73b 100644 --- a/cpp/src/IceXML/StreamI.cpp +++ b/cpp/src/IceXML/StreamI.cpp @@ -21,46 +21,43 @@ // // For input streaming // -#include <framework/MemBufInputSource.hpp> -#include <util/PlatformUtils.hpp> -#include <util/XMLString.hpp> -#include <util/XMLUniDefs.hpp> -#include <framework/XMLFormatter.hpp> -#include <util/TranscodingException.hpp> +#include <xercesc/framework/MemBufInputSource.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/XMLString.hpp> -#include <dom/DOM_DOMException.hpp> -#include <parsers/DOMParser.hpp> +#include <xercesc/dom/DOMException.hpp> +#include <xercesc/parsers/XercesDOMParser.hpp> -#include <dom/DOM_Node.hpp> -#include <dom/DOM_NamedNodeMap.hpp> +#include <xercesc/dom/DOMNode.hpp> +#include <xercesc/dom/DOMNamedNodeMap.hpp> -#include <sax/ErrorHandler.hpp> -#include <sax/SAXParseException.hpp> -#include <dom/DOMString.hpp> +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> using namespace std; using namespace IceXML; using namespace IceUtil; // -// Utilities to make the usage of xerces easier. +// Utility to make the usage of xerces easier. // static string -toString(const DOMString& s) -{ - char* t = s.transcode(); - string r(t); - delete[] t; - return r; -} - -static string toString(const XMLCh* s) { - char* t = XMLString::transcode(s); - string r(t); - delete[] t; - return r; + // + // Some DOM Level 2 operations can return 0. + // + if(s) + { + char* t = XMLString::transcode(s); + string r(t); + delete[] t; + return r; + } + else + { + return string(); + } } // @@ -162,24 +159,23 @@ static XercesInitializer _xercesInitializer; struct StreamInputImpl { StreamInputImpl() : - source(0), - parser(0), - errReporter(0) + document(0) { } + ~StreamInputImpl() { - delete parser; - delete errReporter; - delete source; + if(document) + { + document->release(); + } } - - InputSource* source; - DOMParser* parser; - DOMTreeErrorReporter* errReporter; - DOM_Node current; - list<DOM_Node> nodeStack; + DOMDocument* document; + + DOMNode* current; + + list<DOMNode*> nodeStack; map<string, ::Ice::ObjectPtr> readObjects; }; @@ -203,6 +199,7 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::ostrea IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istream& is, bool schema) : _communicator(communicator), + _input(0), _nextId(0), _dump(false) { @@ -218,31 +215,24 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istrea ::Ice::LoggerPtr logger = communicator->getLogger(); - _input = new StreamInputImpl(); - _input->source = new MemBufInputSource((const XMLByte*)_content.data(), _content.size(), "inputsource"); - // // Create our parser, then attach an error handler to the parser. // The parser will call back to methods of the ErrorHandler if it // discovers errors during the course of parsing the XML // document. // - _input->parser = new DOMParser; - _input->parser->setValidationScheme(DOMParser::Val_Auto); + XercesDOMParser parser; + parser.setValidationScheme(AbstractDOMParser::Val_Auto); if(schema) { - _input->parser->setDoNamespaces(true); - _input->parser->setDoSchema(true); + parser.setDoNamespaces(true); + parser.setDoSchema(true); } - //_input->parser->setValidationSchemaFullChecking(true); - - _input->errReporter = new DOMTreeErrorReporter(logger); - _input->parser->setErrorHandler(_input->errReporter); - _input->parser->setCreateEntityReferenceNodes(false); - _input->parser->setToCreateXMLDeclTypeNode(true); + //parser.setValidationSchemaFullChecking(true); - // TODO: - // parser->setEntityResolver + DOMTreeErrorReporter errReporter(logger); + parser.setErrorHandler(&errReporter); + parser.setCreateEntityReferenceNodes(false); // // Parse the XML file, catching any XML exceptions that might propagate @@ -251,9 +241,9 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istrea bool errorsOccured = false; try { - _input->parser->parse(*_input->source); - int errorCount = _input->parser->getErrorCount(); - if(errorCount > 0) + MemBufInputSource source((const XMLByte*)_content.data(), _content.size(), "inputsource"); + parser.parse(source); + if(parser.getErrorCount() > 0) { errorsOccured = true; } @@ -265,7 +255,7 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istrea logger->error(os.str()); errorsOccured = true; } - catch(const DOM_DOMException& ex) + catch(const DOMException& ex) { ostringstream os; os << "xerces: DOM parsing error: " << toString(ex.msg); @@ -275,7 +265,6 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istrea if(errorsOccured) { - delete _input; throw ::Ice::MarshalException(__FILE__, __LINE__); } @@ -283,8 +272,10 @@ IceXML::StreamI::StreamI(const ::Ice::CommunicatorPtr& communicator, std::istrea // The first child of the document is the root node - ignore // that. Move to the top-level node in the document content. // - _input->current = _input->parser->getDocument().getFirstChild(); - _input->current = _input->current.getFirstChild(); + _input = new StreamInputImpl(); + _input->document = parser.adoptDocument(); + _input->current = _input->document->getFirstChild(); + _input->current = _input->current->getFirstChild(); } IceXML::StreamI::~StreamI() @@ -323,7 +314,7 @@ IceXML::StreamI::startReadDictionary(const string& name) { startRead(name); ::Ice::Int size = readLength(); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); return size; } @@ -337,7 +328,7 @@ void IceXML::StreamI::startReadDictionaryElement() { startRead(getReadPrefix() + seqElementName); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); } void @@ -377,7 +368,7 @@ IceXML::StreamI::startReadSequence(const string& name) { startRead(name); ::Ice::Int size = readLength(); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); return size; } @@ -415,7 +406,7 @@ void IceXML::StreamI::startReadStruct(const string& name) { startRead(name); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); } void @@ -440,7 +431,7 @@ void IceXML::StreamI::startReadException(const string& name) { startRead(name); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); } void @@ -465,13 +456,13 @@ IceXML::StreamI::readEnum(const string& name, const ::Ice::StringSeq& table) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string value = toString(child.getNodeValue()); + string value = toString(child->getNodeValue()); ::Ice::StringSeq::const_iterator p = find(table.begin(), table.end(), value); if(p == table.end()) { @@ -513,13 +504,13 @@ IceXML::StreamI::readByte(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); ::Ice::Int i = atoi(s.c_str()); if(i < -127 || i > 128) { @@ -540,29 +531,29 @@ IceXML::StreamI::readByte(const string& name) // ::Ice::Int size = readLength(); // value.resize(size); // value_type::iterator p = value.begin(); -// DOM_NodeList children = _input->current.getChildNodes(); +// DOMNodeList* children = _input->current->getChildNodes(); // -// int nchildren = children.getLength(); +// int nchildren = children->getLength(); // for(int i = 0; i < nchildren; ++i) // { -// DOM_Node child = children.item(i); -// while(child.getNodeType() != DOM_Node::ELEMENT_NODE) +// DOMNode* child = children->item(i); +// while(child->getNodeType() != DOMNode::ELEMENT_NODE) // { -// child = child.getNextSibling(); +// child = child->getNextSibling(); // } -// string name = toString(child.getNodeName()); +// string name = toString(child->getNodeName()); // if(name != seqElementName) // { // throw ::Ice::MarshalException(__FILE__, __LINE__); // } // -// child = child.getFirstChild(); -// if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) +// child = child->getFirstChild(); +// if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) // { // throw ::Ice::MarshalException(__FILE__, __LINE__); // } // -// string s = toString(child.getNodeValue()); +// string s = toString(child->getNodeValue()); // *p++ = ???; // } // @@ -583,7 +574,7 @@ IceXML::StreamI::readByteSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readByte(elem); @@ -600,7 +591,6 @@ IceXML::StreamI::writeBool(const string& name, bool value) { // No attributes assert(name.find_first_of(" \t") == string::npos); - _os << se(name) << (value ? "true" : "false") << ee; } @@ -620,13 +610,13 @@ IceXML::StreamI::readBool(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); endRead(); @@ -645,7 +635,7 @@ IceXML::StreamI::readBoolSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readBool(elem); @@ -662,7 +652,6 @@ IceXML::StreamI::writeShort(const string& name, ::Ice::Short value) { // No attributes assert(name.find_first_of(" \t") == string::npos); - _os << se(name) << value << ee; } @@ -682,13 +671,13 @@ IceXML::StreamI::readShort(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); ::Ice::Int i = atoi(s.c_str()); if(i < -32767 || i > 32768) { @@ -712,7 +701,7 @@ IceXML::StreamI::readShortSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readShort(elem); @@ -748,13 +737,13 @@ IceXML::StreamI::readInt(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); endRead(); @@ -773,7 +762,7 @@ IceXML::StreamI::readIntSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readInt(elem); @@ -809,13 +798,13 @@ IceXML::StreamI::readLong(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); endRead(); @@ -834,7 +823,7 @@ IceXML::StreamI::readLongSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readLong(elem); @@ -870,13 +859,13 @@ IceXML::StreamI::readFloat(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); endRead(); @@ -895,7 +884,7 @@ IceXML::StreamI::readFloatSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readFloat(elem); @@ -931,13 +920,13 @@ IceXML::StreamI::readDouble(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = _input->current->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string s = toString(child.getNodeValue()); + string s = toString(child->getNodeValue()); endRead(); @@ -956,7 +945,7 @@ IceXML::StreamI::readDoubleSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readDouble(elem); @@ -999,14 +988,14 @@ IceXML::StreamI::readString(const string& name) startRead(name); - DOM_Node child = _input->current.getFirstChild(); - if(!child.isNull()) + DOMNode* child = _input->current->getFirstChild(); + if(child) { - if(child.getNodeType() != DOM_Node::TEXT_NODE) + if(child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - value = toString(child.getNodeValue()); + value = toString(child->getNodeValue()); } else { @@ -1031,7 +1020,7 @@ IceXML::StreamI::readStringSeq(const string& name) value.resize(size); if(size > 0) { - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); for(int i = 0; i < size; ++i) { value[i] = readString(elem); @@ -1060,15 +1049,15 @@ IceXML::StreamI::readProxy(const string& name) { startRead(name); - DOM_Node child = _input->current.getFirstChild(); + DOMNode* child = _input->current->getFirstChild(); string s; - if(!child.isNull()) + if(child) { - if(child.getNodeType() != DOM_Node::TEXT_NODE) + if(child->getNodeType() != DOMNode::TEXT_NODE) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - s = toString(child.getNodeValue()); + s = toString(child->getNodeValue()); } endRead(); @@ -1147,11 +1136,11 @@ IceXML::StreamI::readObject(const string& name, const string& signatureType, con // The first child of the document is the root node - ignore // that. Move to the top-level node in the document content. // - _input->current = _input->parser->getDocument().getFirstChild(); - _input->current = _input->current.getFirstChild(); - while(!_input->current.isNull()) + _input->current = _input->document->getFirstChild(); + _input->current = _input->current->getFirstChild(); + while(_input->current) { - if(_input->current.getNodeType() == DOM_Node::ELEMENT_NODE) + if(_input->current->getNodeType() == DOMNode::ELEMENT_NODE) { string dummy; readAttributes(id, type, dummy); @@ -1160,12 +1149,12 @@ IceXML::StreamI::readObject(const string& name, const string& signatureType, con break; } } - _input->current = _input->current.getNextSibling(); + _input->current = _input->current->getNextSibling(); } // // If the object isn't found, that's an error. // - if(_input->current.isNull()) + if(_input->current == 0) { throw ::Ice::MarshalException(__FILE__, __LINE__); } @@ -1219,7 +1208,7 @@ IceXML::StreamI::readObject(const string& name, const string& signatureType, con // child node & unmarshal the object. // _input->readObjects.insert(map<string, ::Ice::ObjectPtr>::value_type(id, value)); - _input->current = _input->current.getFirstChild(); + _input->current = _input->current->getFirstChild(); value->__unmarshal(this); } @@ -1251,38 +1240,19 @@ IceXML::StreamI::endWrite() void IceXML::StreamI::startRead(const ::std::string& element) { - while(!_input->current.isNull() && _input->current.getNodeType() != DOM_Node::ELEMENT_NODE) + while(_input->current && _input->current->getNodeType() != DOMNode::ELEMENT_NODE) { - _input->current = _input->current.getNextSibling(); + _input->current = _input->current->getNextSibling(); } - if(_input->current.isNull()) + if(_input->current == 0) { throw ::Ice::MarshalException(__FILE__, __LINE__); } - string nodeName = toString(_input->current.getNodeName()); + string nodeName = toString(_input->current->getNodeName()); if(element != nodeName) { - // - // TODO: Work around for bug in xerces. Specifically, when schema - // validation is enabled, the namespace prefix is always empty. - // In this case, we compare only the local names, but only if the - // prefix is empty. - // - string::size_type pos = element.find(':'); - if(pos != string::npos) - { - string localName = toString(_input->current.getLocalName()); - string prefix = toString(_input->current.getPrefix()); - if(!prefix.empty() || pos + 1 == element.size() || localName != element.substr(pos + 1)) - { - throw ::Ice::MarshalException(__FILE__, __LINE__); - } - } - else - { - throw ::Ice::MarshalException(__FILE__, __LINE__); - } + throw ::Ice::MarshalException(__FILE__, __LINE__); } _input->nodeStack.push_back(_input->current); @@ -1293,7 +1263,7 @@ IceXML::StreamI::endRead() { _input->current = _input->nodeStack.back(); _input->nodeStack.pop_back(); - _input->current = _input->current.getNextSibling(); + _input->current = _input->current->getNextSibling(); } void @@ -1396,23 +1366,23 @@ IceXML::StreamI::readAttributes(::std::string& id, ::std::string& type, ::std::s static const string typeStr("type"); static const string hrefStr("href"); - DOM_NamedNodeMap attributes = _input->current.getAttributes(); - int attrCount = attributes.getLength(); + DOMNamedNodeMap* attributes = _input->current->getAttributes(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string name = toString(attribute.getNodeName()); + DOMNode* attribute = attributes->item(i); + string name = toString(attribute->getNodeName()); if(name == idStr) { - id = toString(attribute.getNodeValue()); + id = toString(attribute->getNodeValue()); } else if(name == typeStr) { - type = toString(attribute.getNodeValue()); + type = toString(attribute->getNodeValue()); } else if(name == hrefStr) { - href = toString(attribute.getNodeValue()); + href = toString(attribute->getNodeValue()); } } } @@ -1422,15 +1392,15 @@ IceXML::StreamI::readLength() { static const string lengthStr("length"); - DOM_NamedNodeMap attributes = _input->current.getAttributes(); - int attrCount = attributes.getLength(); + DOMNamedNodeMap* attributes = _input->current->getAttributes(); + int attrCount = attributes->getLength(); for(int i = 0; i < attrCount; i++) { - DOM_Node attribute = attributes.item(i); - string name = toString(attribute.getNodeName()); + DOMNode* attribute = attributes->item(i); + string name = toString(attribute->getNodeName()); if(name == lengthStr) { - return atoi(toString(attribute.getNodeValue()).c_str()); + return atoi(toString(attribute->getNodeValue()).c_str()); } } @@ -1449,7 +1419,7 @@ string IceXML::StreamI::getReadPrefix() const { assert(!_input->nodeStack.empty()); - return getPrefix(toString(_input->nodeStack.back().getNodeName())); + return getPrefix(toString(_input->nodeStack.back()->getNodeName())); } string diff --git a/cpp/src/IceXML/icexml.dsp b/cpp/src/IceXML/icexml.dsp index 54823d8513b..7f9ba03fabe 100644 --- a/cpp/src/IceXML/icexml.dsp +++ b/cpp/src/IceXML/icexml.dsp @@ -54,7 +54,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 xerces-c_1.lib /nologo /dll /machine:I386 /out:"Release/icexml001.dll"
+# ADD LINK32 xerces-c_2.lib /nologo /dll /machine:I386 /out:"Release/icexml001.dll"
# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -86,7 +86,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 xerces-c_1D.lib /nologo /dll /debug /machine:I386 /out:"Debug/icexml001d.dll" /pdbtype:sept
+# ADD LINK32 xerces-c_2D.lib /nologo /dll /debug /machine:I386 /out:"Debug/icexml001d.dll" /pdbtype:sept
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
diff --git a/cpp/src/XMLTransform/ErrorReporter.cpp b/cpp/src/XMLTransform/ErrorReporter.cpp index 186a5ab8095..c4fda858aba 100644 --- a/cpp/src/XMLTransform/ErrorReporter.cpp +++ b/cpp/src/XMLTransform/ErrorReporter.cpp @@ -24,10 +24,10 @@ void DOMTreeErrorReporter::warning(const SAXParseException& ex) { ostringstream out; - out << "Warning at file \"" << toString(DOMString(ex.getSystemId())) + out << "Warning at file \"" << toString(ex.getSystemId()) << "\", line " << ex.getLineNumber() << ", column " << ex.getColumnNumber() - << "\n Message: " << toString(DOMString(ex.getMessage())) << "\n"; + << "\n Message: " << toString(ex.getMessage()) << "\n"; _errors.append(out.str()); } @@ -35,10 +35,10 @@ void DOMTreeErrorReporter::error(const SAXParseException& ex) { ostringstream out; - out << "Error at file \"" << toString(DOMString(ex.getSystemId())) + out << "Error at file \"" << toString(ex.getSystemId()) << "\", line " << ex.getLineNumber() << ", column " << ex.getColumnNumber() - << "\n Message: " << toString(DOMString(ex.getMessage())) << "\n"; + << "\n Message: " << toString(ex.getMessage()) << "\n"; _errors.append(out.str()); } @@ -46,10 +46,10 @@ void DOMTreeErrorReporter::fatalError(const SAXParseException& ex) { ostringstream out; - out << "Fatal at file \"" << toString(DOMString(ex.getSystemId())) + out << "Fatal at file \"" << toString(ex.getSystemId()) << "\", line " << ex.getLineNumber() << ", column " << ex.getColumnNumber() - << "\n Message: " << toString(DOMString(ex.getMessage())) << "\n"; + << "\n Message: " << toString(ex.getMessage()) << "\n"; _errors.append(out.str()); } @@ -72,9 +72,9 @@ DOMTreeErrorReporter::getErrors() const } string -DOMTreeErrorReporter::toString(const DOMString& s) +DOMTreeErrorReporter::toString(const XMLCh* s) { - char* t = s.transcode(); + char* t = XMLString::transcode(s); string r(t); delete[] t; return r; diff --git a/cpp/src/XMLTransform/ErrorReporter.h b/cpp/src/XMLTransform/ErrorReporter.h index 8f65786c864..91f0946f489 100644 --- a/cpp/src/XMLTransform/ErrorReporter.h +++ b/cpp/src/XMLTransform/ErrorReporter.h @@ -11,9 +11,8 @@ #ifndef ERROR_REPORTER_H #define ERROR_REPORTER_H -#include <sax/ErrorHandler.hpp> -#include <sax/SAXParseException.hpp> -#include <dom/DOMString.hpp> +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> #include <string> @@ -42,7 +41,7 @@ private: ::std::string _errors; - ::std::string toString(const DOMString&); + ::std::string toString(const XMLCh*); }; } diff --git a/cpp/src/XMLTransform/XMLTransform.cpp b/cpp/src/XMLTransform/XMLTransform.cpp index f200bf9286b..32e26f71743 100644 --- a/cpp/src/XMLTransform/XMLTransform.cpp +++ b/cpp/src/XMLTransform/XMLTransform.cpp @@ -13,16 +13,13 @@ #include <XMLTransform/ErrorReporter.h> #include <Freeze/DB.h> -#include <util/PlatformUtils.hpp> -#include <util/XMLString.hpp> -#include <util/XMLUniDefs.hpp> -#include <util/TranscodingException.hpp> -#include <framework/MemBufInputSource.hpp> -#include <framework/XMLFormatter.hpp> -#include <dom/DOMString.hpp> -#include <dom/DOM.hpp> -#include <parsers/DOMParser.hpp> -#include <sax/SAXParseException.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/XMLString.hpp> +#include <xercesc/util/Janitor.hpp> +#include <xercesc/framework/MemBufInputSource.hpp> +#include <xercesc/dom/DOM.hpp> +#include <xercesc/parsers/XercesDOMParser.hpp> +#include <xercesc/sax/SAXParseException.hpp> #include <sys/stat.h> @@ -187,60 +184,72 @@ XMLTransform::TransformException::ice_throw() const // Helper to convert a DOMString to a native string. // static string -toString(const DOMString& s) +toString(const XMLCh* s) { - char* t = s.transcode(); - string r(t); - delete[] t; - return r; + // + // Some DOM Level 2 operations can return 0. + // + if(s) + { + char* t = XMLString::transcode(s); + string r(t); + delete[] t; + return r; + } + else + { + return string(); + } } // // Helpers for finding named child nodes. // -static DOM_Node -findChild(const DOM_Node& parent, const string& namespaceURI, const string& localname) +static DOMNode* +findChild(DOMNode* parent, const string& namespaceURI, const string& localname) { - DOM_NodeList children = parent.getChildNodes(); - for(unsigned int i = 0; i < children.getLength(); ++i) + DOMNodeList* children = parent->getChildNodes(); + for(unsigned int i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(toString(child.getNamespaceURI()) == namespaceURI && toString(child.getLocalName()) == localname) + DOMNode* child = children->item(i); + if(toString(child->getNamespaceURI()) == namespaceURI && toString(child->getLocalName()) == localname) { return child; } } - return DOM_Node(); + return 0; } -static DOM_Node -findChild(const DOM_Node& parent, const string& name) +static DOMNode* +findChild(DOMNode* parent, const string& name) { - DOM_NodeList children = parent.getChildNodes(); - for(unsigned int i = 0; i < children.getLength(); ++i) + DOMNodeList* children = parent->getChildNodes(); + for(unsigned int i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(toString(child.getNodeName()) == name) + DOMNode* child = children->item(i); + if(toString(child->getNodeName()) == name) { return child; } } - return DOM_Node(); + + return 0; } // // Helpers to retrieve a named attribute. // static string -getAttributeByName(const DOM_Node& node, const string& name) +getAttributeByName(DOMNode* node, const string& name) { - DOM_NamedNodeMap attributes = node.getAttributes(); + DOMNamedNodeMap* attributes = node->getAttributes(); string value; - DOM_Node n = attributes.getNamedItem(DOMString(name.c_str())); - if(!n.isNull()) + ArrayJanitor<XMLCh> s(XMLString::transcode(name.c_str())); + DOMNode* n = attributes->getNamedItem(s.get()); + if(n) { - value = toString(n.getNodeValue()); + value = toString(n->getNodeValue()); } return value; @@ -250,14 +259,14 @@ getAttributeByName(const DOM_Node& node, const string& name) // Helpers for specific attributes. // static string -getTypeAttribute(const DOM_Node& node) +getTypeAttribute(DOMNode* node) { static const string typeName = "type"; return getAttributeByName(node, typeName); } static string -getNameAttribute(const DOM_Node& node) +getNameAttribute(DOMNode* node) { static const string nameName = "name"; return getAttributeByName(node, nameName); @@ -292,7 +301,6 @@ findFile(const string& name, const Ice::StringSeq& paths) return name; } - // // DocumentMap. This maps namespace uri -> a set of documents. // @@ -302,20 +310,21 @@ typedef multimap< string, DocumentInfoPtr> DocumentMap; // Document info holds the DOM root of the document, a map of prefix to namespace URI & the documents // targetNamespace. // -XMLTransform::DocumentInfo::DocumentInfo(const DOM_Document& document, const DOM_Node& root, +XMLTransform::DocumentInfo::DocumentInfo(DOMDocument* document, bool releaseDocument, DOMNode* root, const string& targetNamespace) : _document(document), + _releaseDocument(releaseDocument), _targetNamespace(targetNamespace) { static const string targetNamespaceAttrName = "targetNamespace"; static const string xmlnsAttrName = "xmlns"; - DOM_NamedNodeMap attributes = root.getAttributes(); - unsigned int max = attributes.getLength(); + DOMNamedNodeMap* attributes = root->getAttributes(); + unsigned int max = attributes->getLength(); for(unsigned int i = 0; i < max; ++i) { - DOM_Node attribute = attributes.item(i); - string attrName = toString(attribute.getNodeName()); + DOMNode* attribute = attributes->item(i); + string attrName = toString(attribute->getNodeName()); if(attrName.substr(0, 5) == xmlnsAttrName) { string ns; @@ -323,17 +332,25 @@ XMLTransform::DocumentInfo::DocumentInfo(const DOM_Document& document, const DOM { ns = attrName.substr(6); } - string uri = toString(attribute.getNodeValue()); + string uri = toString(attribute->getNodeValue()); _nsMap.insert(make_pair(ns, uri)); } else if(attrName == targetNamespaceAttrName) { - _targetNamespace = toString(attribute.getNodeValue()); + _targetNamespace = toString(attribute->getNodeValue()); } } } -DOM_Document +XMLTransform::DocumentInfo::~DocumentInfo() +{ + if(_releaseDocument) + { + _document->release(); + } +} + +DOMDocument* XMLTransform::DocumentInfo::getDocument() const { return _document; @@ -428,31 +445,31 @@ XMLTransform::Transform::~Transform() } static ::IceUtil::XMLOutput& -operator<<(::IceUtil::XMLOutput& os, const DOM_Node& node) +operator<<(::IceUtil::XMLOutput& os, DOMNode* node) { - switch(node.getNodeType()) + switch(node->getNodeType()) { - case DOM_Node::TEXT_NODE: + case DOMNode::TEXT_NODE: { - os << ::IceUtil::startEscapes << toString(node.getNodeValue()) << ::IceUtil::endEscapes; + os << ::IceUtil::startEscapes << toString(node->getNodeValue()) << ::IceUtil::endEscapes; break; } - case DOM_Node::ELEMENT_NODE: + case DOMNode::ELEMENT_NODE: { - os << ::IceUtil::se(toString(node.getNodeName())); - DOM_NamedNodeMap attributes = node.getAttributes(); - for(unsigned int i = 0; i < attributes.getLength(); ++i) + os << ::IceUtil::se(toString(node->getNodeName())); + DOMNamedNodeMap* attributes = node->getAttributes(); + for(unsigned int i = 0; i < attributes->getLength(); ++i) { - DOM_Node attribute = attributes.item(i); - os << ::IceUtil::attr(toString(attribute.getNodeName()), toString(attribute.getNodeValue())); + DOMNode* attribute = attributes->item(i); + os << ::IceUtil::attr(toString(attribute->getNodeName()), toString(attribute->getNodeValue())); } - DOM_Node child = node.getFirstChild(); - while(!child.isNull()) + DOMNode* child = node->getFirstChild(); + while(child) { os << child; - child = child.getNextSibling(); + child = child->getNextSibling(); } os << ::IceUtil::ee; @@ -480,9 +497,9 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } @@ -514,7 +531,7 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, DOMNode*) { } @@ -543,7 +560,7 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, DOMNode* node) { _transform->transform(os, info, _name, node); } @@ -583,19 +600,19 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } - DOM_Node child = node.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = node->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw SchemaViolation(__FILE__, __LINE__); } - string value = toString(child.getNodeValue()); + string value = toString(child->getNodeValue()); if(find(_values.begin(), _values.end(), value) == _values.end()) { throw IllegalTransform(__FILE__, __LINE__); @@ -631,19 +648,19 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } - DOM_Node child = node.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = node->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw SchemaViolation(__FILE__, __LINE__); } - string value = toString(child.getNodeValue()); + string value = toString(child->getNodeValue()); #ifdef WIN32 Ice::Long v = _atoi64(value.c_str()); #else @@ -705,15 +722,15 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } - DOM_Node child = node.getFirstChild(); - if(child.isNull() || child.getNodeType() != DOM_Node::TEXT_NODE) + DOMNode* child = node->getFirstChild(); + if(child == 0 || child->getNodeType() != DOMNode::TEXT_NODE) { throw SchemaViolation(__FILE__, __LINE__); } @@ -748,13 +765,13 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } - string name = toString(node.getNodeName()); + string name = toString(node->getNodeName()); os << ::IceUtil::se(name); string length = getAttributeByName(node, "length"); @@ -762,17 +779,17 @@ public: long l = atol(length.c_str()); - DOM_NodeList children = node.getChildNodes(); - for(unsigned int i = 0; i < children.getLength(); ++i) + DOMNodeList* children = node->getChildNodes(); + for(unsigned int i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(child.getNodeType() != DOM_Node::ELEMENT_NODE) + DOMNode* child = children->item(i); + if(child->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } static const string sequenceElementName = "e"; - string nodeName = toString(child.getLocalName()); + string nodeName = toString(child->getLocalName()); if(l == 0 || nodeName != sequenceElementName) { throw SchemaViolation(__FILE__, __LINE__); @@ -824,24 +841,23 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string&, DOMNode* node) { - if(node.isNull()) + if(node == 0) { throw SchemaViolation(__FILE__, __LINE__); } - os << ::IceUtil::se(toString(node.getNodeName())); - DOM_NamedNodeMap attributes = node.getAttributes(); - for(unsigned int i = 0; i < attributes.getLength(); ++i) + os << ::IceUtil::se(toString(node->getNodeName())); + DOMNamedNodeMap* attributes = node->getAttributes(); + for(unsigned int i = 0; i < attributes->getLength(); ++i) { - DOM_Node attribute = attributes.item(i); - os << ::IceUtil::attr(toString(attribute.getNodeName()), toString(attribute.getNodeValue())); + DOMNode* attribute = attributes->item(i); + os << ::IceUtil::attr(toString(attribute->getNodeName()), toString(attribute->getNodeValue())); } - DOM_NodeList children = node.getChildNodes(); for(vector<ElementTransformPtr>::const_iterator p = _transforms.begin(); p != _transforms.end(); ++p) { - DOM_Node child = findChild(node, (*p)->namespaceURI(), (*p)->name()); + DOMNode* child = findChild(node, (*p)->namespaceURI(), (*p)->name()); (*p)->transform(os, info, (*p)->name(), child); } @@ -882,7 +898,7 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string& name, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string& name, DOMNode* node) { // // First check for the "href" attribute, which indicates a @@ -951,11 +967,11 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string& name, const DOM_Node& node) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr& info, const string& name, DOMNode* node) { os << ::IceUtil::se(name); - DOM_Node child; // Nil + DOMNode* child = 0; // Nil for(vector<ElementTransformPtr>::const_iterator p = _transforms.begin(); p != _transforms.end(); ++p) { @@ -997,7 +1013,7 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string& name, const DOM_Node&) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string& name, DOMNode*) { os << ::IceUtil::se(name); os << ::IceUtil::startEscapes << _s << ::IceUtil::endEscapes; @@ -1032,7 +1048,7 @@ public: } virtual void - transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string& name, const DOM_Node&) + transform(::IceUtil::XMLOutput& os, const DocumentInfoPtr&, const string& name, DOMNode*) { os << ::IceUtil::se(name); os << ::IceUtil::attr(_attrName, _attrValue); @@ -1066,7 +1082,7 @@ public: TransformFactory(const Ice::StringSeq&); ~TransformFactory(); - void create(const DOM_Document&, const DOM_Document&, TransformMap*, TransformMap*); + void create(DOMDocument*, DOMDocument*, TransformMap*, TransformMap*); private: @@ -1091,21 +1107,21 @@ private: // Schema import handling. // void import(DocumentMap&, const string&, const string&); - void processImport(const DOM_Document&, DocumentMap&); + void processImport(DOMDocument*, DocumentMap&); // // Element processing. // - void processElements(const DocumentInfoPtr& info); + void processElements(const DocumentInfoPtr&); // // Type searching primitives. // - bool findTypeInDocument(const DOM_Document& doc, const string& local, DOM_Node&); - bool findType(const DocumentMap&, const DocumentInfoPtr&, const string&, DOM_Node&, DocumentInfoPtr&); + bool findTypeInDocument(DOMDocument*, const string&, DOMNode*&); + bool findType(const DocumentMap&, const DocumentInfoPtr&, const string&, DOMNode*&, DocumentInfoPtr&); - Type getType(const DOM_Node&); - Type getTypeByName(const DocumentMap&, const DocumentInfoPtr&, const string&, DOM_Node&, DocumentInfoPtr&); + Type getType(DOMNode*); + Type getTypeByName(const DocumentMap&, const DocumentInfoPtr&, const string&, DOMNode*&, DocumentInfoPtr&); // // Top-level transform creation routine. @@ -1116,18 +1132,18 @@ private: // // Subsequent creation routines. // - TransformPtr createComplexTypeTransform(const DOM_Node&, const DOM_Node&); - TransformPtr createSimpleTypeTransform(const DOM_Node&, const DOM_Node&); + TransformPtr createComplexTypeTransform(DOMNode*, DOMNode*); + TransformPtr createSimpleTypeTransform(DOMNode*, DOMNode*); - TransformPtr createStaticClassTransform(const DOM_Node&, const DOM_Node&); - void createEnumValues(const DOM_Node&, vector< string>&); - TransformPtr createEnumerationTransform(const DOM_Node&); + TransformPtr createStaticClassTransform(DOMNode*, DOMNode*); + void createEnumValues(DOMNode*, vector< string>&); + TransformPtr createEnumerationTransform(DOMNode*); - void createSequenceElementTransform(const DocumentInfoPtr&, const DOM_Node&, - const DocumentInfoPtr&, const DOM_Node&, + void createSequenceElementTransform(const DocumentInfoPtr&, DOMNode*, + const DocumentInfoPtr&, DOMNode*, vector<ElementTransformPtr>&); - void createClassContentTransform(const DocumentInfoPtr&, const DOM_Node&, - const DocumentInfoPtr&, const DOM_Node&, + void createClassContentTransform(const DocumentInfoPtr&, DOMNode*, + const DocumentInfoPtr&, DOMNode*, vector<ElementTransformPtr>&); // @@ -1139,13 +1155,13 @@ private: // // Subsequent creation routines for new datatypes. // - void createDefaultInitializedSequenceElementTransform(const DocumentInfoPtr&, const DOM_Node&, + void createDefaultInitializedSequenceElementTransform(const DocumentInfoPtr&, DOMNode*, vector<ElementTransformPtr>&); // // Utility routines. // - DOM_Node findSchemaRoot(const DOM_Document&); + DOMNode* findSchemaRoot(DOMDocument*); // // Search paths for importing schemas. @@ -1206,7 +1222,7 @@ XMLTransform::TransformFactory::~TransformFactory() // maps: A map of local@uri -> element transform and a map of transforms for specific class types. // void -XMLTransform::TransformFactory::create(const DOM_Document& fromDoc, const DOM_Document& toDoc, TransformMap* elements, +XMLTransform::TransformFactory::create(DOMDocument* fromDoc, DOMDocument* toDoc, TransformMap* elements, TransformMap* staticClassTransforms) { // @@ -1223,13 +1239,13 @@ XMLTransform::TransformFactory::create(const DOM_Document& fromDoc, const DOM_Do // Create both of the document infos for the old & new schemas. // Add the root documents to the document map. // - DOM_Node fromSchema = findSchemaRoot(fromDoc); - assert(!fromSchema.isNull()); - DocumentInfoPtr fromInfo = new DocumentInfo(fromDoc, fromSchema); + DOMNode* fromSchema = findSchemaRoot(fromDoc); + assert(fromSchema); + DocumentInfoPtr fromInfo = new DocumentInfo(fromDoc, false, fromSchema); - DOM_Node toSchema = findSchemaRoot(toDoc); - assert(!toSchema.isNull()); - DocumentInfoPtr toInfo = new DocumentInfo(toDoc, toSchema); + DOMNode* toSchema = findSchemaRoot(toDoc); + assert(toSchema); + DocumentInfoPtr toInfo = new DocumentInfo(toDoc, false, toSchema); _fromDocs.insert(make_pair(fromInfo->getTargetNamespace(), fromInfo)); _toDocs.insert(make_pair(toInfo->getTargetNamespace(), toInfo)); @@ -1253,8 +1269,8 @@ void XMLTransform::TransformFactory::import(DocumentMap& documents, const string& ns, const string& loc) { DOMTreeErrorReporter errorReporter; - DOMParser parser; - parser.setValidationScheme(DOMParser::Val_Never); + XercesDOMParser parser; + parser.setValidationScheme(AbstractDOMParser::Val_Never); parser.setDoNamespaces(true); parser.setErrorHandler(&errorReporter); @@ -1288,10 +1304,17 @@ XMLTransform::TransformFactory::import(DocumentMap& documents, const string& ns, throw e; } - DOM_Document document = parser.getDocument(); - DOM_Node schema = findSchemaRoot(document); + DOMDocument* document = parser.getDocument(); + DOMNode* schema = findSchemaRoot(document); + + // + // For exception safety, we don't call adoptDocument() until after findSchemaRoot(). + // We need to adopt the document because otherwise the parser would release it + // when the parser is destroyed. + // + parser.adoptDocument(); - DocumentInfoPtr info = new DocumentInfo(document, schema, ns); + DocumentInfoPtr info = new DocumentInfo(document, true, schema, ns); documents.insert(make_pair(info->getTargetNamespace(), info)); // @@ -1301,15 +1324,15 @@ XMLTransform::TransformFactory::import(DocumentMap& documents, const string& ns, } void -XMLTransform::TransformFactory::processImport(const DOM_Document& parent, DocumentMap& documents) +XMLTransform::TransformFactory::processImport(DOMDocument* parent, DocumentMap& documents) { - DOM_Node schema = findSchemaRoot(parent); - assert(!schema.isNull()); + DOMNode* schema = findSchemaRoot(parent); + assert(schema); - DOM_Node child = schema.getFirstChild(); - while(!child.isNull()) + DOMNode* child = schema->getFirstChild(); + while(child) { - string nodeName = toString(child.getNodeName()); + string nodeName = toString(child->getNodeName()); if(nodeName == importElementName) { string ns = getAttributeByName(child, "namespace"); @@ -1317,25 +1340,25 @@ XMLTransform::TransformFactory::processImport(const DOM_Document& parent, Docume import(documents, ns, loc); } - child = child.getNextSibling(); + child = child->getNextSibling(); } } void XMLTransform::TransformFactory::processElements(const DocumentInfoPtr& info) { - DOM_Node schema = findSchemaRoot(info->getDocument()); + DOMNode* schema = findSchemaRoot(info->getDocument()); - DOM_NodeList children = schema.getChildNodes(); - for(unsigned int i = 0; i < children.getLength(); ++i) + DOMNodeList* children = schema->getChildNodes(); + for(unsigned int i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(child.getNodeType() != DOM_Node::ELEMENT_NODE) + DOMNode* child = children->item(i); + if(child->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } - string nodeName = toString(child.getNodeName()); + string nodeName = toString(child->getNodeName()); if(nodeName != elementElementName) { continue; @@ -1347,7 +1370,7 @@ XMLTransform::TransformFactory::processElements(const DocumentInfoPtr& info) string nameAttr = getNameAttribute(child); assert(nameAttr.find(':') == string::npos); - DOM_Node to; + DOMNode* to; DocumentInfoPtr toNodeInfo; // Overrides the top-level toInfo. if(!findType(_toDocs, info, nameAttr, to, toNodeInfo)) { @@ -1356,9 +1379,9 @@ XMLTransform::TransformFactory::processElements(const DocumentInfoPtr& info) // continue; } - assert(!to.isNull() && toNodeInfo); + assert(to && toNodeInfo); - string toNodeName = toString(to.getNodeName()); + string toNodeName = toString(to->getNodeName()); string toNameAttr = getNameAttribute(to); assert(toNameAttr == nameAttr); // Sanity check. @@ -1413,16 +1436,16 @@ XMLTransform::TransformFactory::processElements(const DocumentInfoPtr& info) // Search for a type in a particular document. Return true if the type is present, false otherwise. // bool -XMLTransform::TransformFactory::findTypeInDocument(const DOM_Document& doc, const string& local, DOM_Node& target) +XMLTransform::TransformFactory::findTypeInDocument(DOMDocument* doc, const string& local, DOMNode*& target) { - DOM_Node schema = findSchemaRoot(doc); + DOMNode* schema = findSchemaRoot(doc); - DOM_NodeList children = schema.getChildNodes(); + DOMNodeList* children = schema->getChildNodes(); unsigned int i; - for(i = 0; i < children.getLength(); ++i) + for(i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(child.getNodeType() == DOM_Node::ELEMENT_NODE) + DOMNode* child = children->item(i); + if(child->getNodeType() == DOMNode::ELEMENT_NODE) { string na = getNameAttribute(child); if(na == local) @@ -1443,7 +1466,7 @@ XMLTransform::TransformFactory::findTypeInDocument(const DOM_Document& doc, cons // bool XMLTransform::TransformFactory::findType(const DocumentMap& docs, const DocumentInfoPtr& info, const string& type, - DOM_Node& n, DocumentInfoPtr& nInfo) + DOMNode*& n, DocumentInfoPtr& nInfo) { string uri; string local; @@ -1501,7 +1524,7 @@ struct StringTypeTable } TransformFactory::Type -XMLTransform::TransformFactory::getType(const DOM_Node& node) +XMLTransform::TransformFactory::getType(DOMNode* node) { // // Check the appinfo element for the actual type. @@ -1526,19 +1549,19 @@ XMLTransform::TransformFactory::getType(const DOM_Node& node) // // Locate the annotation/appinfo/type node. // - DOM_Node child = findChild(node, annotationElementName); - if(!child.isNull()) + DOMNode* child = findChild(node, annotationElementName); + if(child) { child = findChild(child, appinfoElementName); - if(!child.isNull()) + if(child) { child = findChild(child, "type"); - if(!child.isNull()) + if(child) { - child = child.getFirstChild(); - if(!child.isNull()) + child = child->getFirstChild(); + if(child) { - type = toString(child.getNodeValue()); + type = toString(child->getNodeValue()); } } } @@ -1557,7 +1580,7 @@ XMLTransform::TransformFactory::getType(const DOM_Node& node) TransformFactory::Type XMLTransform::TransformFactory::getTypeByName(const DocumentMap& docs, const DocumentInfoPtr& info, const string& type, - DOM_Node& n, DocumentInfoPtr& nInfo) + DOMNode*& n, DocumentInfoPtr& nInfo) { // // First check to see if the type is a primitive schema type. @@ -1587,7 +1610,7 @@ XMLTransform::TransformFactory::getTypeByName(const DocumentMap& docs, const Doc ex.reason = "no node found for type " + type; throw ex; } - assert(!n.isNull() && nInfo); + assert(n && nInfo); return getType(n); } @@ -1596,11 +1619,11 @@ TransformPtr XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeInfo, const string& fromTypeName, const DocumentInfoPtr& toTypeInfo, const string& toTypeName) { - DOM_Node from; + DOMNode* from; DocumentInfoPtr fromInfo; Type fromType = getTypeByName(_fromDocs, fromTypeInfo, fromTypeName, from, fromInfo); - DOM_Node to; + DOMNode* to; DocumentInfoPtr toInfo; Type toType = getTypeByName(_toDocs, toTypeInfo, toTypeName, to, toInfo); @@ -1699,9 +1722,9 @@ XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeI throw ex; } - DOM_Node fromSeq = findChild(from, sequenceElementName); - DOM_Node toSeq = findChild(to, sequenceElementName); - if(fromSeq.isNull() || toSeq.isNull()) + DOMNode* fromSeq = findChild(from, sequenceElementName); + DOMNode* toSeq = findChild(to, sequenceElementName); + if(fromSeq == 0 || toSeq == 0) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "missing sequence element in " + fromTypeName; @@ -1711,10 +1734,10 @@ XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeI // // Sequences have one element - which contains the type of the sequence. // - DOM_Node fromElement = findChild(fromSeq, elementElementName); - DOM_Node toElement = findChild(toSeq, elementElementName); + DOMNode* fromElement = findChild(fromSeq, elementElementName); + DOMNode* toElement = findChild(toSeq, elementElementName); - if(fromElement.isNull() || toElement.isNull()) + if(fromElement == 0 || toElement == 0) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "invalid sequence element in " + fromTypeName; @@ -1741,9 +1764,9 @@ XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeI throw ex; } - DOM_Node fromSeq = findChild(from, sequenceElementName); - DOM_Node toSeq = findChild(to, sequenceElementName); - if(fromSeq.isNull() || toSeq.isNull()) + DOMNode* fromSeq = findChild(from, sequenceElementName); + DOMNode* toSeq = findChild(to, sequenceElementName); + if(fromSeq == 0 || toSeq == 0) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "missing sequence element in " + fromTypeName; @@ -1753,9 +1776,9 @@ XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeI // // Sequences have one element - which contains the type of the sequence. // - DOM_Node fromElement = findChild(fromSeq, elementElementName); - DOM_Node toElement = findChild(toSeq, elementElementName); - if(fromElement.isNull() || toElement.isNull()) + DOMNode* fromElement = findChild(fromSeq, elementElementName); + DOMNode* toElement = findChild(toSeq, elementElementName); + if(fromElement == 0 || toElement == 0) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "invalid sequence element in " + fromTypeName; @@ -1858,14 +1881,14 @@ XMLTransform::TransformFactory::createTransform(const DocumentInfoPtr& fromTypeI } void -XMLTransform::TransformFactory::createSequenceElementTransform(const DocumentInfoPtr& fromInfo, const DOM_Node& from, - const DocumentInfoPtr& toInfo, const DOM_Node& to, +XMLTransform::TransformFactory::createSequenceElementTransform(const DocumentInfoPtr& fromInfo, DOMNode* from, + const DocumentInfoPtr& toInfo, DOMNode* to, vector<ElementTransformPtr>& v) { // // Precondition: The nodes must not be nil. // - if(from.isNull() || to.isNull()) + if(from == 0 || to == 0) { throw InvalidSchema(__FILE__, __LINE__); } @@ -1878,27 +1901,27 @@ XMLTransform::TransformFactory::createSequenceElementTransform(const DocumentInf // * Node moved. // - DOM_NodeList fromSeqChildren = from.getChildNodes(); - DOM_NodeList toSeqChildren = to.getChildNodes(); + DOMNodeList* fromSeqChildren = from->getChildNodes(); + DOMNodeList* toSeqChildren = to->getChildNodes(); // // First run through the to set. This loop handles the node // remove, and node changed transforms (plus allowable type // changes). // - for(unsigned int i = 0; i < toSeqChildren.getLength(); ++i) + for(unsigned int i = 0; i < toSeqChildren->getLength(); ++i) { ElementTransformPtr transform; - DOM_Node toChild = toSeqChildren.item(i); - if(toChild.getNodeType() != DOM_Node::ELEMENT_NODE) + DOMNode* toChild = toSeqChildren->item(i); + if(toChild->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } - if(toString(toChild.getNodeName()) != elementElementName) + if(toString(toChild->getNodeName()) != elementElementName) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "expected " + elementElementName + " but found " + toString(toChild.getNodeName()); + ex.reason = "expected " + elementElementName + " but found " + toString(toChild->getNodeName()); throw ex; } @@ -1908,20 +1931,20 @@ XMLTransform::TransformFactory::createSequenceElementTransform(const DocumentInf // // Search for the node in the fromSeqChildren list. // - for(unsigned int j = 0; j < fromSeqChildren.getLength(); ++j) + for(unsigned int j = 0; j < fromSeqChildren->getLength(); ++j) { - DOM_Node fromChild = fromSeqChildren.item(j); + DOMNode* fromChild = fromSeqChildren->item(j); - if(fromChild.getNodeType() != DOM_Node::ELEMENT_NODE) + if(fromChild->getNodeType() != DOMNode::ELEMENT_NODE) { // Skip non element nodes. continue; } - if(toString(fromChild.getNodeName()) != elementElementName) + if(toString(fromChild->getNodeName()) != elementElementName) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "expected " + elementElementName + " but found " + toString(fromChild.getNodeName()); + ex.reason = "expected " + elementElementName + " but found " + toString(fromChild->getNodeName()); throw ex; } @@ -1950,16 +1973,16 @@ XMLTransform::TransformFactory::createSequenceElementTransform(const DocumentInf } void -XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPtr& fromInfo, const DOM_Node& from, - const DocumentInfoPtr& toInfo, const DOM_Node& to, +XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPtr& fromInfo, DOMNode* from, + const DocumentInfoPtr& toInfo, DOMNode* to, vector<ElementTransformPtr>& v) { static const string baseAttrName = "base"; - DOM_Node fromContent = findChild(from, complexContentElementName); - DOM_Node toContent = findChild(to, complexContentElementName); + DOMNode* fromContent = findChild(from, complexContentElementName); + DOMNode* toContent = findChild(to, complexContentElementName); - if(fromContent.isNull() && toContent.isNull()) + if(fromContent == 0 && toContent == 0) { // // Must be base of a class hierarchy (while this implementation is a little more flexible, with Ice it @@ -1970,15 +1993,15 @@ XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPt return; } - if(fromContent.isNull() || toContent.isNull()) + if(fromContent == 0 || toContent == 0) { throw InvalidSchema(__FILE__, __LINE__); } - DOM_Node fromExtension = findChild(fromContent, extensionElementName); - DOM_Node toExtension = findChild(toContent, extensionElementName); + DOMNode* fromExtension = findChild(fromContent, extensionElementName); + DOMNode* toExtension = findChild(toContent, extensionElementName); - if(fromExtension.isNull() || toExtension.isNull()) + if(fromExtension == 0 || toExtension == 0) { throw InvalidSchema(__FILE__, __LINE__); } @@ -1996,7 +2019,7 @@ XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPt throw ex; } - DOM_Node fromBaseNode; + DOMNode* fromBaseNode; DocumentInfoPtr fromBaseInfo; if(!findType(_fromDocs, fromInfo, fromBaseName, fromBaseNode, fromBaseInfo)) { @@ -2004,9 +2027,9 @@ XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPt ex.reason = "unable to find type for " + fromBaseName; throw ex; } - assert(!fromBaseNode.isNull() && fromBaseInfo); + assert(fromBaseNode && fromBaseInfo); - DOM_Node toBaseNode; + DOMNode* toBaseNode; DocumentInfoPtr toBaseInfo; if(!findType(_toDocs, toInfo, toBaseName, toBaseNode, toBaseInfo)) { @@ -2014,7 +2037,7 @@ XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPt ex.reason = "unable to find type for " + toBaseName; throw ex; } - assert(!toBaseNode.isNull() && toBaseInfo); + assert(toBaseNode && toBaseInfo); // // Find the content transform for the base type. @@ -2026,34 +2049,34 @@ XMLTransform::TransformFactory::createClassContentTransform(const DocumentInfoPt } void -XMLTransform::TransformFactory::createEnumValues(const DOM_Node& to, vector<string>& values) +XMLTransform::TransformFactory::createEnumValues(DOMNode* to, vector<string>& values) { - DOM_Node toRes = findChild(to, restrictionElementName); - if(toRes.isNull()) + DOMNode* toRes = findChild(to, restrictionElementName); + if(toRes == 0) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "didn't find " + restrictionElementName + " in " + toString(to.getNodeName()); + ex.reason = "didn't find " + restrictionElementName + " in " + toString(to->getNodeName()); throw ex; } // // Gather up a list of allowable values. // - DOM_NodeList toResChildren = toRes.getChildNodes(); + DOMNodeList* toResChildren = toRes->getChildNodes(); - for(unsigned int i = 0; i < toResChildren.getLength(); ++i) + for(unsigned int i = 0; i < toResChildren->getLength(); ++i) { - DOM_Node toChild = toResChildren.item(i); + DOMNode* toChild = toResChildren->item(i); - if(toChild.getNodeType() != DOM_Node::ELEMENT_NODE) + if(toChild->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } - if(toString(toChild.getNodeName()) != enumerationElementName) + if(toString(toChild->getNodeName()) != enumerationElementName) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "expected " + enumerationElementName + " but found " + toString(toChild.getNodeName()); + ex.reason = "expected " + enumerationElementName + " but found " + toString(toChild->getNodeName()); throw ex; } @@ -2061,7 +2084,7 @@ XMLTransform::TransformFactory::createEnumValues(const DOM_Node& to, vector<stri if(value.empty()) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "didn't find value attribute in " + toString(toChild.getNodeName()); + ex.reason = "didn't find value attribute in " + toString(toChild->getNodeName()); throw ex; } @@ -2070,7 +2093,7 @@ XMLTransform::TransformFactory::createEnumValues(const DOM_Node& to, vector<stri } TransformPtr -XMLTransform::TransformFactory::createEnumerationTransform(const DOM_Node& to) +XMLTransform::TransformFactory::createEnumerationTransform(DOMNode* to) { vector<string> values; createEnumValues(to, values); @@ -2091,7 +2114,7 @@ XMLTransform::TransformFactory::createDefaultInitializedTransform(const Document return p->second; } - DOM_Node n; + DOMNode* n; DocumentInfoPtr nInfo; Type type = getTypeByName(_toDocs, info, typeName, n, nInfo); @@ -2117,7 +2140,7 @@ XMLTransform::TransformFactory::createDefaultInitializedTransform(const Document case TypeEnumeration: { - if(n.isNull()) + if(n == 0) { throw InvalidSchema(__FILE__, __LINE__); } @@ -2130,13 +2153,13 @@ XMLTransform::TransformFactory::createDefaultInitializedTransform(const Document case TypeStruct: { - if(n.isNull()) + if(n == 0) { throw InvalidSchema(__FILE__, __LINE__); } - DOM_Node seq = findChild(n, sequenceElementName); - if(seq.isNull()) + DOMNode* seq = findChild(n, sequenceElementName); + if(seq == 0) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "didn't find " + sequenceElementName + " in struct"; @@ -2152,7 +2175,7 @@ XMLTransform::TransformFactory::createDefaultInitializedTransform(const Document case TypeDictionary: case TypeSequence: { - if(n.isNull()) + if(n == 0) { throw InvalidSchema(__FILE__, __LINE__); } @@ -2185,7 +2208,7 @@ XMLTransform::TransformFactory::createDefaultInitializedTransform(const Document void XMLTransform::TransformFactory::createDefaultInitializedSequenceElementTransform(const DocumentInfoPtr& info, - const DOM_Node& node, + DOMNode* node, vector<ElementTransformPtr>& v) { // @@ -2196,19 +2219,19 @@ XMLTransform::TransformFactory::createDefaultInitializedSequenceElementTransform // * Node moved. // - DOM_NodeList seqChild = node.getChildNodes(); - for(unsigned int i = 0; i < seqChild.getLength(); ++i) + DOMNodeList* seqChild = node->getChildNodes(); + for(unsigned int i = 0; i < seqChild->getLength(); ++i) { - DOM_Node child = seqChild.item(i); - if(child.getNodeType() != DOM_Node::ELEMENT_NODE) + DOMNode* child = seqChild->item(i); + if(child->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } - if(toString(child.getNodeName()) != elementElementName) + if(toString(child->getNodeName()) != elementElementName) { InvalidSchema ex(__FILE__, __LINE__); - ex.reason = "expected " + elementElementName + " but found " + toString(child.getNodeName()); + ex.reason = "expected " + elementElementName + " but found " + toString(child->getNodeName()); throw ex; } @@ -2217,26 +2240,25 @@ XMLTransform::TransformFactory::createDefaultInitializedSequenceElementTransform } } -DOM_Node -XMLTransform::TransformFactory::findSchemaRoot(const DOM_Document& root) +DOMNode* +XMLTransform::TransformFactory::findSchemaRoot(DOMDocument* root) { - DOMString schemaURI("http://www.w3.org/2001/XMLSchema"); - DOMString schemaLocalName("schema"); - DOM_Node n; + ArrayJanitor<XMLCh> schemaURI(XMLString::transcode("http://www.w3.org/2001/XMLSchema")); + ArrayJanitor<XMLCh> schemaLocalName(XMLString::transcode("schema")); - DOM_NodeList nodes = root.getElementsByTagNameNS(schemaURI, schemaLocalName); - if(nodes.getLength() != 1) + DOMNodeList* nodes = root->getElementsByTagNameNS(schemaURI.get(), schemaLocalName.get()); + if(nodes->getLength() != 1) { InvalidSchema ex(__FILE__, __LINE__); ex.reason = "unable to find schema root"; throw ex; } - return nodes.item(0); + return nodes->item(0); } -XMLTransform::Transformer::Transformer(const Ice::StringSeq& paths, const DOM_Document& fromDoc, - const DOM_Document& toDoc) +XMLTransform::Transformer::Transformer(const Ice::StringSeq& paths, DOMDocument* fromDoc, + DOMDocument* toDoc) { TransformFactory factory(paths); factory.create(fromDoc, toDoc, &_elements, &_staticClassTransforms); @@ -2247,35 +2269,35 @@ XMLTransform::Transformer::~Transformer() } void -XMLTransform::Transformer::transform(::IceUtil::XMLOutput& os, const DOM_Document& doc, bool emitRoot) +XMLTransform::Transformer::transform(::IceUtil::XMLOutput& os, DOMDocument* doc, bool emitRoot) { - DOM_Node root = doc.getFirstChild(); + DOMNode* root = doc->getFirstChild(); unsigned int i; if(emitRoot) { - os << ::IceUtil::se(toString(root.getNodeName())); - DOM_NamedNodeMap attributes = root.getAttributes(); - for(i = 0; i < attributes.getLength(); ++i) + os << ::IceUtil::se(toString(root->getNodeName())); + DOMNamedNodeMap* attributes = root->getAttributes(); + for(i = 0; i < attributes->getLength(); ++i) { - DOM_Node attribute = attributes.item(i); - os << ::IceUtil::attr(toString(attribute.getNodeName()), toString(attribute.getNodeValue())); + DOMNode* attribute = attributes->item(i); + os << ::IceUtil::attr(toString(attribute->getNodeName()), toString(attribute->getNodeValue())); } } - DocumentInfoPtr info = new DocumentInfo(doc, root); + DocumentInfoPtr info = new DocumentInfo(doc, false, root); - DOM_NodeList children = root.getChildNodes(); - for(i = 0; i < children.getLength(); ++i) + DOMNodeList* children = root->getChildNodes(); + for(i = 0; i < children->getLength(); ++i) { - DOM_Node child = children.item(i); - if(child.getNodeType() != DOM_Node::ELEMENT_NODE) + DOMNode* child = children->item(i); + if(child->getNodeType() != DOMNode::ELEMENT_NODE) { continue; } - string nodeName = toString(child.getNodeName()); + string nodeName = toString(child->getNodeName()); // // Create local@namespace version of the element name. @@ -2321,14 +2343,15 @@ void XMLTransform::DBTransformer::transform(const DBEnvironmentPtr& dbEnv, const DBPtr& db, const Ice::StringSeq& paths, const string& oldSchemaFile, const string& newSchemaFile) { - DOMParser parser; - parser.setValidationScheme(DOMParser::Val_Auto); - parser.setDoNamespaces(true); - DOMTreeErrorReporter errReporter; + + XercesDOMParser parser; + parser.setValidationScheme(AbstractDOMParser::Val_Auto); + parser.setDoNamespaces(true); parser.setErrorHandler(&errReporter); - DOM_Document oldSchema, newSchema; + DOMDocument* oldSchema; + DOMDocument* newSchema; try { @@ -2404,7 +2427,7 @@ XMLTransform::DBTransformer::transform(const DBEnvironmentPtr& dbEnv, const DBPt fullKey.append(footer); MemBufInputSource keySource((const XMLByte*)fullKey.data(), fullKey.size(), "key"); parser.parse(keySource); - DOM_Document keyDoc = parser.getDocument(); + DOMDocument* keyDoc = parser.getDocument(); ostringstream keyStream; IceUtil::XMLOutput keyOut(keyStream); @@ -2425,7 +2448,7 @@ XMLTransform::DBTransformer::transform(const DBEnvironmentPtr& dbEnv, const DBPt fullValue.append(footer); MemBufInputSource valueSource((const XMLByte*)fullValue.data(), fullValue.size(), "value"); parser.parse(valueSource); - DOM_Document valueDoc = parser.getDocument(); + DOMDocument* valueDoc = parser.getDocument(); ostringstream valueStream; IceUtil::XMLOutput valueOut(valueStream); @@ -2469,7 +2492,7 @@ XMLTransform::DBTransformer::transform(const DBEnvironmentPtr& dbEnv, const DBPt { reason = "SAX exception: " + toString(ex.getMessage()); } - catch(const DOM_DOMException& ex) + catch(DOMException& ex) { ostringstream out; out << "DOM exception (" << ex.code << ") " << toString(ex.msg); diff --git a/cpp/src/XMLTransform/xmltransform.dsp b/cpp/src/XMLTransform/xmltransform.dsp index cfc0277cfbd..acde75c77b1 100644 --- a/cpp/src/XMLTransform/xmltransform.dsp +++ b/cpp/src/XMLTransform/xmltransform.dsp @@ -54,7 +54,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 xerces-c_1.lib /nologo /dll /machine:I386 /out:"Release/xmltransform001.dll" /libpath:"../../../lib"
+# ADD LINK32 xerces-c_2.lib /nologo /dll /machine:I386 /out:"Release/xmltransform001.dll" /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /debug /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
@@ -86,7 +86,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 xerces-c_1D.lib /nologo /dll /debug /machine:I386 /out:"Debug/xmltransform001d.dll" /pdbtype:sept /libpath:"../../../lib"
+# ADD LINK32 xerces-c_2D.lib /nologo /dll /debug /machine:I386 /out:"Debug/xmltransform001d.dll" /pdbtype:sept /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
SOURCE="$(InputPath)"
diff --git a/cpp/src/Yellow/yellowC.dsp b/cpp/src/Yellow/yellowC.dsp index 4704bc94c47..3c9fd1b3428 100644 --- a/cpp/src/Yellow/yellowC.dsp +++ b/cpp/src/Yellow/yellowC.dsp @@ -51,7 +51,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 setargv.obj xerces-c_1.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/yellowadmin.exe" /libpath:"../../../lib"
+# ADD LINK32 setargv.obj xerces-c_2.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/yellowadmin.exe" /libpath:"../../../lib"
# SUBTRACT LINK32 /debug /nodefaultlib
!ELSEIF "$(CFG)" == "YellowC - Win32 Debug"
@@ -77,7 +77,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 setargv.obj xerces-c_1D.lib /nologo /subsystem:console /debug /machine:I386 /out:"../../bin/yellowadmin.exe" /pdbtype:sept /libpath:"../../../lib"
+# ADD LINK32 setargv.obj xerces-c_2D.lib /nologo /subsystem:console /debug /machine:I386 /out:"../../bin/yellowadmin.exe" /pdbtype:sept /libpath:"../../../lib"
# SUBTRACT LINK32 /nodefaultlib
!ENDIF
diff --git a/cpp/src/slice2xsd/Validate.cpp b/cpp/src/slice2xsd/Validate.cpp index b2bed446c19..2f8c8cd6baf 100644 --- a/cpp/src/slice2xsd/Validate.cpp +++ b/cpp/src/slice2xsd/Validate.cpp @@ -10,33 +10,29 @@ #include <IceUtil/Config.h> -#include <util/PlatformUtils.hpp> -#include <util/XMLString.hpp> -#include <util/XMLUniDefs.hpp> -#include <framework/XMLFormatter.hpp> -#include <util/TranscodingException.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include <xercesc/util/XMLString.hpp> -#include <dom/DOM_DOMException.hpp> -#include <parsers/DOMParser.hpp> -//#include <dom/DOM.hpp> +#include <xercesc/dom/DOMException.hpp> +#include <xercesc/parsers/XercesDOMParser.hpp> - -#include <sax/ErrorHandler.hpp> -#include <sax/SAXParseException.hpp> -#include <dom/DOMString.hpp> +#include <xercesc/sax/ErrorHandler.hpp> +#include <xercesc/sax/SAXParseException.hpp> #include <iostream> using namespace std; -// Global streaming operator for DOMString is defined in DOMPrint.cpp -//extern ostream& operator<<(ostream& target, const DOMString& s); -ostream& operator<< (ostream& target, const DOMString& s) +// +// Utility to make the usage of xerces easier. +// +static string +toString(const XMLCh* s) { - char *p = s.transcode(); - target << p; - delete [] p; - return target; + char* t = XMLString::transcode(s); + string r(t); + delete[] t; + return r; } class DOMTreeErrorReporter : public ErrorHandler @@ -50,30 +46,30 @@ public: void warning(const SAXParseException& toCatch) { - cerr << "Warning at file \"" << DOMString(toCatch.getSystemId()) + cerr << "Warning at file \"" << toString(toCatch.getSystemId()) << "\", line " << toCatch.getLineNumber() << ", column " << toCatch.getColumnNumber() - << "\n Message: " << DOMString(toCatch.getMessage()) << endl; + << "\n Message: " << toString(toCatch.getMessage()) << endl; } void error(const SAXParseException& toCatch) { _sawErrors = true; - cerr << "Error at file \"" << DOMString(toCatch.getSystemId()) + cerr << "Error at file \"" << toString(toCatch.getSystemId()) << "\", line " << toCatch.getLineNumber() << ", column " << toCatch.getColumnNumber() - << "\n Message: " << DOMString(toCatch.getMessage()) << endl; + << "\n Message: " << toString(toCatch.getMessage()) << endl; } void fatalError(const SAXParseException& toCatch) { _sawErrors = true; - cerr << "Fatal at file \"" << DOMString(toCatch.getSystemId()) + cerr << "Fatal at file \"" << toString(toCatch.getSystemId()) << "\", line " << toCatch.getLineNumber() << ", column " << toCatch.getColumnNumber() - << "\n Message: " << DOMString(toCatch.getMessage()) << endl; + << "\n Message: " << toString(toCatch.getMessage()) << endl; } void resetErrors() @@ -110,7 +106,7 @@ main(int argc, char** argv) { cerr << "Error during Xerces-c Initialization.\n" << " Exception message:" - << DOMString(toCatch.getMessage()) << endl; + << toString(toCatch.getMessage()) << endl; return 1; } @@ -154,16 +150,15 @@ main(int argc, char** argv) // The parser will call back to methods of the ErrorHandler if it // discovers errors during the course of parsing the XML document. // - DOMParser* parser = new DOMParser; - parser->setValidationScheme(DOMParser::Val_Auto); + XercesDOMParser* parser = new XercesDOMParser; + parser->setValidationScheme(XercesDOMParser::Val_Auto); parser->setDoNamespaces(true); parser->setDoSchema(true); parser->setValidationSchemaFullChecking(true); - DOMTreeErrorReporter *errReporter = new DOMTreeErrorReporter(); - parser->setErrorHandler(errReporter); + DOMTreeErrorReporter errReporter; + parser->setErrorHandler(&errReporter); parser->setCreateEntityReferenceNodes(false); - parser->setToCreateXMLDeclTypeNode(true); // // Parse the XML file, catching any XML exceptions that might propogate @@ -179,10 +174,10 @@ main(int argc, char** argv) } catch(const XMLException& e) { - cerr << "An error occured during parsing\n Message: " << DOMString(e.getMessage()) << endl; + cerr << "An error occured during parsing\n Message: " << toString(e.getMessage()) << endl; errorsOccured = true; } - catch(const DOM_DOMException& e) + catch(const DOMException& e) { cerr << "A DOM error occured during parsing\n DOMException code: " << e.code << endl; errorsOccured = true; @@ -192,7 +187,11 @@ main(int argc, char** argv) cerr << "An error occured during parsing\n " << endl; errorsOccured = true; } + + delete parser; } + XMLPlatformUtils::Terminate(); + return (errorsOccured) ? EXIT_FAILURE : EXIT_SUCCESS; } |