diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp index a94f71538303e8fad500c2cda4b2cf47b80786c4..e34b3460f5d5a0145864b60710b35ad6be18fcac 100644 --- a/src/xercesc/internal/IGXMLScanner.cpp +++ b/src/xercesc/internal/IGXMLScanner.cpp @@ -1012,6 +1012,9 @@ void IGXMLScanner::scanEndTag(bool& gotData) // reset xsi:type ComplexTypeInfo if (fGrammarType == Grammar::SchemaGrammarType) { ((SchemaElementDecl*)topElem->fThisElement)->setXsiComplexTypeInfo(0); + if (!isRoot) + ((SchemaElementDecl*)(fElemStack.topElement()->fThisElement))->setXsiComplexTypeInfo( + ((SchemaValidator*)fValidator)->getCurrentTypeInfo()); // call matchers and de-activate context int oldCount = fMatcherStack->getMatcherCount(); @@ -2422,6 +2425,9 @@ bool IGXMLScanner::scanStartTagNS(bool& gotData) // reset xsi:type ComplexTypeInfo ((SchemaElementDecl*)elemDecl)->setXsiComplexTypeInfo(0); + if (!isRoot) + ((SchemaElementDecl*)(fElemStack.topElement()->fThisElement))->setXsiComplexTypeInfo( + ((SchemaValidator*)fValidator)->getCurrentTypeInfo()); // call matchers and de-activate context int oldCount = fMatcherStack->getMatcherCount(); diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index 67db8590f2ad2116a24227de2bce609c92431a69..88894f0f35dc665bd7df5b0981a2427e59015b56 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -958,6 +958,9 @@ void SGXMLScanner::scanEndTag(bool& gotData) // reset xsi:type ComplexTypeInfo ((SchemaElementDecl*)topElem->fThisElement)->setXsiComplexTypeInfo(0); + if (!isRoot) + ((SchemaElementDecl*)(fElemStack.topElement()->fThisElement))->setXsiComplexTypeInfo( + ((SchemaValidator*)fValidator)->getCurrentTypeInfo()); // call matchers and de-activate context int oldCount = fMatcherStack->getMatcherCount(); @@ -1532,6 +1535,9 @@ bool SGXMLScanner::scanStartTag(bool& gotData) // reset xsi:type ComplexTypeInfo ((SchemaElementDecl*)elemDecl)->setXsiComplexTypeInfo(0); + if (!isRoot) + ((SchemaElementDecl*)(fElemStack.topElement()->fThisElement))->setXsiComplexTypeInfo( + ((SchemaValidator*)fValidator)->getCurrentTypeInfo()); // call matchers and de-activate context int oldCount = fMatcherStack->getMatcherCount(); diff --git a/src/xercesc/validators/schema/SchemaValidator.hpp b/src/xercesc/validators/schema/SchemaValidator.hpp index e1d5958590e111ea63ffc794636aacb91db34bb3..14bde75f8cc2a6383008952d55a2ed2f0f55cd01 100644 --- a/src/xercesc/validators/schema/SchemaValidator.hpp +++ b/src/xercesc/validators/schema/SchemaValidator.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2003/01/09 22:34:54 tng + * [Bug 14955] error validating parser. + * * Revision 1.10 2002/11/07 21:57:37 tng * Fix the following Schema Test Failures: * 1. Typo when comparing miscFlags with FIXED @@ -154,20 +157,6 @@ public: SchemaValidator(XMLErrorReporter* const errReporter = 0); virtual ~SchemaValidator(); - // ----------------------------------------------------------------------- - // Setter methods - // ----------------------------------------------------------------------- - void setGrammarResolver(GrammarResolver* grammarResolver); - - void setXsiType(const XMLCh* const prefix - , const XMLCh* const localPart - , const unsigned int uriId); - - void setNillable(bool isNil); - void setErrorReporter(XMLErrorReporter* const errorReporter); - void setExitOnFirstFatal(const bool newValue); - void setDatatypeBuffer(const XMLCh* const value); - // ----------------------------------------------------------------------- // Implementation of the XMLValidator interface // ----------------------------------------------------------------------- @@ -224,6 +213,24 @@ public: // ----------------------------------------------------------------------- void normalizeWhiteSpace(DatatypeValidator* dV, const XMLCh* const value, XMLBuffer& toFill); + // ----------------------------------------------------------------------- + // Setter methods + // ----------------------------------------------------------------------- + void setGrammarResolver(GrammarResolver* grammarResolver); + + void setXsiType(const XMLCh* const prefix + , const XMLCh* const localPart + , const unsigned int uriId); + + void setNillable(bool isNil); + void setErrorReporter(XMLErrorReporter* const errorReporter); + void setExitOnFirstFatal(const bool newValue); + void setDatatypeBuffer(const XMLCh* const value); + + // ----------------------------------------------------------------------- + // Getter methods + // ----------------------------------------------------------------------- + ComplexTypeInfo* getCurrentTypeInfo() const; private: // ----------------------------------------------------------------------- @@ -396,6 +403,15 @@ inline void SchemaValidator::setDatatypeBuffer(const XMLCh* const value) fDatatypeBuffer.append(value); } +// --------------------------------------------------------------------------- +// SchemaValidator: Getter methods +// --------------------------------------------------------------------------- +inline ComplexTypeInfo* SchemaValidator::getCurrentTypeInfo() const { + if (fTypeStack->empty()) + return 0; + return fTypeStack->peek(); +} + // --------------------------------------------------------------------------- // Virtual interface // ---------------------------------------------------------------------------