From c36384830c4536c26c69a0a00ecd727c19eb1bb9 Mon Sep 17 00:00:00 2001 From: Alberto Massari <amassari@apache.org> Date: Thu, 11 Aug 2005 20:59:30 +0000 Subject: [PATCH] Added a Locator object to the XMLResourceIdentifier so that resolveEntity can know who is calling it git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@231517 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/internal/DGXMLScanner.cpp | 3 ++- src/xercesc/internal/IGXMLScanner2.cpp | 6 ++++-- src/xercesc/internal/ReaderMgr.cpp | 6 ++++-- src/xercesc/internal/SGXMLScanner.cpp | 6 ++++-- src/xercesc/internal/XMLScanner.cpp | 3 ++- src/xercesc/util/XMLResourceIdentifier.hpp | 20 ++++++++++++++----- .../validators/schema/TraverseSchema.cpp | 11 +++++++++- 7 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/xercesc/internal/DGXMLScanner.cpp b/src/xercesc/internal/DGXMLScanner.cpp index 975d86caa..b8109719d 100644 --- a/src/xercesc/internal/DGXMLScanner.cpp +++ b/src/xercesc/internal/DGXMLScanner.cpp @@ -2384,7 +2384,8 @@ InputSource* DGXMLScanner::resolveSystemId(const XMLCh* const sysId ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId); + expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId, + &fReaderMgr); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } else diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp index b84d7b60a..2f53cb9c2 100644 --- a/src/xercesc/internal/IGXMLScanner2.cpp +++ b/src/xercesc/internal/IGXMLScanner2.cpp @@ -1698,7 +1698,8 @@ void IGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* con ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::SchemaGrammar, - expSysId.getRawBuffer(), uri, XMLUni::fgZeroLenString, lastInfo.systemId); + expSysId.getRawBuffer(), uri, XMLUni::fgZeroLenString, lastInfo.systemId, + &fReaderMgr); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } else @@ -1884,7 +1885,8 @@ InputSource* IGXMLScanner::resolveSystemId(const XMLCh* const sysId ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId); + expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId, + &fReaderMgr); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } else diff --git a/src/xercesc/internal/ReaderMgr.cpp b/src/xercesc/internal/ReaderMgr.cpp index 1eccfc6d5..a46c46b16 100644 --- a/src/xercesc/internal/ReaderMgr.cpp +++ b/src/xercesc/internal/ReaderMgr.cpp @@ -494,7 +494,8 @@ XMLReader* ReaderMgr::createReader( const XMLCh* const sysId LastExtEntityInfo lastInfo; getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - expSysId.getRawBuffer(), XMLUni::fgZeroLenString, pubId, lastInfo.systemId); + expSysId.getRawBuffer(), XMLUni::fgZeroLenString, pubId, lastInfo.systemId, + this); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } @@ -643,7 +644,8 @@ XMLReader* ReaderMgr::createReader( const XMLCh* const baseURI if (fEntityHandler) { XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - expSysId.getRawBuffer(), XMLUni::fgZeroLenString, pubId, baseURI); + expSysId.getRawBuffer(), XMLUni::fgZeroLenString, pubId, baseURI, + this); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index 96462b7e0..158e77a95 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -3540,7 +3540,8 @@ void SGXMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* con ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::SchemaGrammar, - expSysId.getRawBuffer(), uri, XMLUni::fgZeroLenString, lastInfo.systemId); + expSysId.getRawBuffer(), uri, XMLUni::fgZeroLenString, lastInfo.systemId, + &fReaderMgr); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } else @@ -3705,7 +3706,8 @@ InputSource* SGXMLScanner::resolveSystemId(const XMLCh* const sysId ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId); + expSysId.getRawBuffer(), 0, pubId, lastInfo.systemId, + &fReaderMgr); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } else diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp index 60f53afb8..d1baf8941 100644 --- a/src/xercesc/internal/XMLScanner.cpp +++ b/src/xercesc/internal/XMLScanner.cpp @@ -1658,7 +1658,8 @@ Grammar* XMLScanner::loadGrammar(const XMLCh* const systemId ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr.getLastExtEntityInfo(lastInfo); XMLResourceIdentifier resourceIdentifier(XMLResourceIdentifier::ExternalEntity, - systemId, 0, XMLUni::fgZeroLenString, lastInfo.systemId); + systemId, 0, XMLUni::fgZeroLenString, lastInfo.systemId, + &fReaderMgr); srcToUse = fEntityHandler->resolveEntity(&resourceIdentifier); } diff --git a/src/xercesc/util/XMLResourceIdentifier.hpp b/src/xercesc/util/XMLResourceIdentifier.hpp index 4184f6f68..734548220 100644 --- a/src/xercesc/util/XMLResourceIdentifier.hpp +++ b/src/xercesc/util/XMLResourceIdentifier.hpp @@ -23,6 +23,8 @@ XERCES_CPP_NAMESPACE_BEGIN +class Locator; + /** * <p>This class is used along with XMLEntityResolver to resolve entities. * Instead of passing publicId and systemId on the resolveEntity call, @@ -93,7 +95,7 @@ class XMLUTIL_EXPORT XMLResourceIdentifier { public: - /** @name Public Contants */ + /** @name Public Constants */ //@{ enum ResourceIdentifierType { SchemaGrammar = 0, @@ -113,7 +115,8 @@ public: , const XMLCh* const systemId , const XMLCh* const nameSpace = 0 , const XMLCh* const publicId = 0 - , const XMLCh* const baseURI = 0); + , const XMLCh* const baseURI = 0 + , const Locator* locator = 0); /** Destructor */ ~XMLResourceIdentifier() @@ -133,7 +136,7 @@ public: const XMLCh* getSchemaLocation() const; const XMLCh* getBaseURI() const; const XMLCh* getNameSpace() const; - + const Locator* getLocator() const; //@} private : @@ -143,7 +146,7 @@ private : const XMLCh* fSystemId; const XMLCh* fBaseURI; const XMLCh* fNameSpace; - + const Locator* fLocator; /* Unimplemented constructors and operators */ @@ -185,16 +188,23 @@ inline const XMLCh* XMLResourceIdentifier::getNameSpace() const return fNameSpace; } +inline const Locator* XMLResourceIdentifier::getLocator() const +{ + return fLocator; +} + inline XMLResourceIdentifier::XMLResourceIdentifier(const ResourceIdentifierType resourceIdentifierType , const XMLCh* const systemId , const XMLCh* const nameSpace , const XMLCh* const publicId - , const XMLCh* const baseURI ) + , const XMLCh* const baseURI + , const Locator* locator ) : fResourceIdentifierType(resourceIdentifierType) , fPublicId(publicId) , fSystemId(systemId) , fBaseURI(baseURI) , fNameSpace(nameSpace) + , fLocator(locator) { } diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index a07596d0b..fbe23e9e9 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -586,6 +586,9 @@ void TraverseSchema::preprocessInclude(const DOMElement* const elem) { // ------------------------------------------------------------------ // Resolve schema location // ------------------------------------------------------------------ + fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0, + ((XSDElementNSImpl*) elem)->getLineNo(), + ((XSDElementNSImpl*) elem)->getColumnNo()); InputSource* srcToFill = resolveSchemaLocation(schemaLocation, XMLResourceIdentifier::SchemaInclude); Janitor<InputSource> janSrc(srcToFill); @@ -779,6 +782,9 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { // ------------------------------------------------------------------ // Resolve schema location // ------------------------------------------------------------------ + fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0, + ((XSDElementNSImpl*) elem)->getLineNo(), + ((XSDElementNSImpl*) elem)->getColumnNo()); InputSource* srcToFill = resolveSchemaLocation(schemaLocation, XMLResourceIdentifier::SchemaImport, nameSpace); @@ -6628,7 +6634,7 @@ InputSource* TraverseSchema::resolveSchemaLocation(const XMLCh* const loc, if (fEntityHandler){ XMLResourceIdentifier resourceIdentifier(resourceIdentitiferType, - normalizedURI, nameSpace, 0, fSchemaInfo->getCurrentSchemaURL()); + normalizedURI, nameSpace, 0, fSchemaInfo->getCurrentSchemaURL(), fLocator); srcToFill = fEntityHandler->resolveEntity(&resourceIdentifier); } @@ -7863,6 +7869,9 @@ bool TraverseSchema::openRedefinedSchema(const DOMElement* const redefineElem) { // ------------------------------------------------------------------ // Resolve schema location // ------------------------------------------------------------------ + fLocator->setValues(fSchemaInfo->getCurrentSchemaURL(), 0, + ((XSDElementNSImpl*) redefineElem)->getLineNo(), + ((XSDElementNSImpl*) redefineElem)->getColumnNo()); InputSource* srcToFill = resolveSchemaLocation(schemaLocation, XMLResourceIdentifier::SchemaRedefine); Janitor<InputSource> janSrc(srcToFill); -- GitLab