diff --git a/src/xercesc/internal/DGXMLScanner.cpp b/src/xercesc/internal/DGXMLScanner.cpp index 975d86caa54bda157708d9102cfb845eaff832f1..b8109719d03e415cec8e7e96abc7fb8265e547fe 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 b84d7b60a3300ca4ae9ed77b1b962d3c859de2b0..2f53cb9c24d0ceba2d84a5617501aab6de106f09 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 1eccfc6d52f41da30babbf298cb87d7b08483f3d..a46c46b164182d0d58644a06ba756cb8da6e9210 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 96462b7e04fb3185ab4e2e4c0edf47ac215fb42c..158e77a95a299266378dbbd12250748e5f1c59d4 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 60f53afb8753c382f87be85611d2e2dbeed76be9..d1baf894158f7c7f3a088ed3f56176042d54615f 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 4184f6f68cb8f9e9dffdd11f92caf32c555f8cb7..734548220223ab4640744335316a271c4590b643 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 a07596d0bd8ab25a5214210ffc85abb9533dc59a..fbe23e9e96fbb4519420a806cdec1a673578302f 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);