elena 2004/01/23 09:22:21 Modified: java/src/org/apache/xerces/impl/xs XMLSchemaLoader.java Log: Fix a bug in full-schema checking. When validator loads the schema the full checking on the grammar should not be done during loading, instead validator will do it. If schema pre-loaded (by user or via JAXP) the full checking should be done. Revision Changes Path 1.24 +43 -30 xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java Index: XMLSchemaLoader.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaLoader.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- XMLSchemaLoader.java 21 Jan 2004 23:08:33 -0000 1.23 +++ XMLSchemaLoader.java 23 Jan 2004 17:22:21 -0000 1.24 @@ -511,8 +511,14 @@ processExternalHints(fExternalSchemas, fExternalNoNSSchema, locationPairs, fErrorReporter); SchemaGrammar grammar = loadSchema(desc, source, locationPairs); + if(grammar != null && fGrammarPool != null) { fGrammarPool.cacheGrammars(XMLGrammarDescription.XML_SCHEMA, fGrammarBucket.getGrammars()); + // NOTE: we only need to verify full checking in case the schema was not provided via JAXP + // since full checking already verified for all JAXP schemas + if(fIsCheckedFully && fJAXPCache.get(grammar) != grammar) { + XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter); + } } return grammar; } // loadGrammar(XMLInputSource): Grammar @@ -538,19 +544,22 @@ processJAXPSchemaSource(locationPairs); } SchemaGrammar grammar = fSchemaHandler.parseSchema(source, desc, locationPairs); - // is full-checking enabled? If so, if we're preparsing we'll - // need to let XSConstraints have a go at the new grammar. - if(fIsCheckedFully) { - XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter); - } + return grammar; } // loadSchema(XSDDescription, XMLInputSource): SchemaGrammar - // this makes use of the schema location property values. - // we store the namespace/location pairs in a hashtable (use "" as the - // namespace of absent namespace). when resolving an entity, we first try - // to find in the hashtable whether there is a value for that namespace, - // if so, pass that location value to the user-defined entity resolver. + /** This method tries to resolve location of the given schema. + * The loader stores the namespace/location pairs in a hashtable (use "" as the + * namespace of absent namespace). When resolving an entity, loader first tries + * to find in the hashtable whether there is a value for that namespace, + * if so, pass that location value to the user-defined entity resolver. + * + * @param desc + * @param locationPairs + * @param entityResolver + * @return + * @throws IOException + */ public static XMLInputSource resolveDocument(XSDDescription desc, Hashtable locationPairs, XMLEntityResolver entityResolver) throws IOException { String loc = null; @@ -663,6 +672,8 @@ * REVISIT: the JAXP 1.2 spec is less than clear as to whether this property * should be available to imported schemas. I have assumed * that it should. - NG + * Note: all JAXP schema files will be checked for full-schema validity if the feature was set up + * */ private void processJAXPSchemaSource(Hashtable locationPairs) throws IOException { fJAXPProcessed = true; @@ -699,6 +710,9 @@ if(fJAXPSource instanceof InputStream || fJAXPSource instanceof InputSource) { fJAXPCache.put(fJAXPSource, g); + if(fIsCheckedFully) { + XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter); + } } fGrammarBucket.putGrammar(g); } @@ -744,8 +758,7 @@ String targetNamespace = null ; // load schema SchemaGrammar grammar = fSchemaHandler.parseSchema(xis,fXSDDescription, locationPairs); - // is full-checking enabled? If so, if we're preparsing we'll - // need to let XSConstraints have a go at the new grammar. + if(fIsCheckedFully) { XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter); } @@ -902,22 +915,6 @@ fGrammarBucket.reset(); - boolean psvi = true; - try { - psvi = componentManager.getFeature(AUGMENT_PSVI); - } catch (XMLConfigurationException e) { - psvi = false; - } - - if (!psvi) { - fDeclPool.reset(); - fCMBuilder.setDeclPool(fDeclPool); - fSchemaHandler.setDeclPool(fDeclPool); - } else { - fCMBuilder.setDeclPool(null); - fSchemaHandler.setDeclPool(null); - } - fSubGroupHandler.reset(); boolean parser_settings; @@ -937,7 +934,23 @@ // Note: in case XMLSchemaValidator has created the loader, // the entity manager property is null fEntityManager = (XMLEntityManager)componentManager.getProperty(ENTITY_MANAGER); - + + boolean psvi = true; + try { + psvi = componentManager.getFeature(AUGMENT_PSVI); + } catch (XMLConfigurationException e) { + psvi = false; + } + + if (!psvi) { + fDeclPool.reset(); + fCMBuilder.setDeclPool(fDeclPool); + fSchemaHandler.setDeclPool(fDeclPool); + } else { + fCMBuilder.setDeclPool(null); + fSchemaHandler.setDeclPool(null); + } + // get schema location properties try { fExternalSchemas = (String) componentManager.getProperty(SCHEMA_LOCATION);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]