elena       2003/11/07 11:45:09

  Modified:    java/src/org/apache/xerces/parsers XML11Configuration.java
  Log:
  Disallow setting interna/parser-settings feature by the user. This is a special 
feature
  that only configuration is allowed to set. Improve a bit XML 1.1. parsing -- don't 
create
  non-namespace aware scanners unless those are needed.
  
  Revision  Changes    Path
  1.7       +60 -51    
xml-xerces/java/src/org/apache/xerces/parsers/XML11Configuration.java
  
  Index: XML11Configuration.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/XML11Configuration.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XML11Configuration.java   7 Nov 2003 00:26:18 -0000       1.6
  +++ XML11Configuration.java   7 Nov 2003 19:45:09 -0000       1.7
  @@ -194,8 +194,6 @@
        protected static final String EXTERNAL_PARAMETER_ENTITIES =
                Constants.SAX_FEATURE_PREFIX + 
Constants.EXTERNAL_PARAMETER_ENTITIES_FEATURE;
                
  -     protected static final String PARSER_SETTINGS = 
  -         Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;        
       
   
       // property identifiers
  @@ -468,7 +466,7 @@
   
           // add default recognized features
           final String[] recognizedFeatures =
  -            {   PARSER_SETTINGS,
  +            {   
                CONTINUE_AFTER_FATAL_ERROR, LOAD_EXTERNAL_DTD, // from 
XMLDTDScannerImpl
                                VALIDATION,                 
                                NAMESPACES,
  @@ -480,20 +478,20 @@
                XMLSCHEMA_VALIDATION, XMLSCHEMA_FULL_CHECKING,                  
                                EXTERNAL_GENERAL_ENTITIES,  
                                EXTERNAL_PARAMETER_ENTITIES,
  +                             PARSER_SETTINGS
                        };
           addRecognizedFeatures(recognizedFeatures);
                // set state for default features
  -             super.setFeature(VALIDATION, false);
  -             super.setFeature(NAMESPACES, true);
  -             super.setFeature(EXTERNAL_GENERAL_ENTITIES, true);
  -             super.setFeature(EXTERNAL_PARAMETER_ENTITIES, true);
  -             super.setFeature(CONTINUE_AFTER_FATAL_ERROR, false);
  -             super.setFeature(LOAD_EXTERNAL_DTD, true); // from XMLDTDScannerImpl
  -        // set state for default features
  -             super.setFeature(SCHEMA_ELEMENT_DEFAULT, true);
  -             super.setFeature(NORMALIZE_DATA, true);
  -             super.setFeature(SCHEMA_AUGMENT_PSVI, true);
  -             super.setFeature(PARSER_SETTINGS, true);
  +             fFeatures.put(VALIDATION, Boolean.FALSE);
  +             fFeatures.put(NAMESPACES, Boolean.TRUE);
  +             fFeatures.put(EXTERNAL_GENERAL_ENTITIES, Boolean.TRUE);
  +             fFeatures.put(EXTERNAL_PARAMETER_ENTITIES, Boolean.TRUE);
  +             fFeatures.put(CONTINUE_AFTER_FATAL_ERROR, Boolean.FALSE);
  +             fFeatures.put(LOAD_EXTERNAL_DTD, Boolean.TRUE);
  +             fFeatures.put(SCHEMA_ELEMENT_DEFAULT, Boolean.TRUE);
  +             fFeatures.put(NORMALIZE_DATA, Boolean.TRUE);
  +             fFeatures.put(SCHEMA_AUGMENT_PSVI, Boolean.TRUE);
  +             fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
   
           // add default recognized properties
           final String[] recognizedProperties =
  @@ -525,43 +523,43 @@
                        symbolTable = new SymbolTable();
                }
                fSymbolTable = symbolTable;
  -             super.setProperty(SYMBOL_TABLE, fSymbolTable);
  +             fProperties.put(SYMBOL_TABLE, fSymbolTable);
                
           fGrammarPool = grammarPool;
           if (fGrammarPool != null) {
  -                     super.setProperty(XMLGRAMMAR_POOL, fGrammarPool);
  +                     fProperties.put(XMLGRAMMAR_POOL, fGrammarPool);
           }
   
           fEntityManager = new XMLEntityManager();
  -             super.setProperty(ENTITY_MANAGER, fEntityManager);
  +             fProperties.put(ENTITY_MANAGER, fEntityManager);
           addCommonComponent(fEntityManager);
   
           fErrorReporter = new XMLErrorReporter();
           fErrorReporter.setDocumentLocator(fEntityManager.getEntityScanner());
  -             super.setProperty(ERROR_REPORTER, fErrorReporter);
  +             fProperties.put(ERROR_REPORTER, fErrorReporter);
           addCommonComponent(fErrorReporter);
   
           fNamespaceScanner = new XMLNSDocumentScannerImpl();
  -             super.setProperty(DOCUMENT_SCANNER, fNamespaceScanner);
  +             fProperties.put(DOCUMENT_SCANNER, fNamespaceScanner);
           addComponent((XMLComponent) fNamespaceScanner);
   
           fDTDScanner = new XMLDTDScannerImpl();
  -        super.setProperty(DTD_SCANNER, fDTDScanner);
  +             fProperties.put(DTD_SCANNER, fDTDScanner);
           addComponent((XMLComponent) fDTDScanner);
   
           fDTDProcessor = new XMLDTDProcessor();
  -        super.setProperty(DTD_PROCESSOR, fDTDProcessor);
  +             fProperties.put(DTD_PROCESSOR, fDTDProcessor);
           addComponent((XMLComponent) fDTDProcessor);
   
           fDTDValidator = new XMLNSDTDValidator();
  -        super.setProperty(DTD_VALIDATOR, fDTDValidator);
  +             fProperties.put(DTD_VALIDATOR, fDTDValidator);
           addComponent(fDTDValidator);
   
           fDatatypeValidatorFactory = DTDDVFactory.getInstance();
  -        super.setProperty(DATATYPE_VALIDATOR_FACTORY, fDatatypeValidatorFactory);
  +             fProperties.put(DATATYPE_VALIDATOR_FACTORY, fDatatypeValidatorFactory);
   
           fValidationManager = new ValidationManager();
  -        super.setProperty(VALIDATION_MANAGER, fValidationManager);
  +             fProperties.put(VALIDATION_MANAGER, fValidationManager);
           
           fVersionDetector = new XMLVersionDetector();
           
  @@ -848,6 +846,28 @@
       } // parse(boolean):boolean
       
        /**
  +      * Returns the state of a feature.
  +      * 
  +      * @param featureId The feature identifier.
  +              * @return true if the feature is supported
  +      * 
  +      * @throws XMLConfigurationException Thrown for configuration error.
  +      *                                   In general, components should
  +      *                                   only throw this exception if
  +      *                                   it is <strong>really</strong>
  +      *                                   a critical error.
  +      */
  +     public boolean getFeature(String featureId)
  +             throws XMLConfigurationException {
  +                     // make this feature special
  +        if (featureId.equals(PARSER_SETTINGS)){
  +             return fConfigUpdated;
  +        }
  +        return super.getFeature(featureId);
  +
  +     } // getFeature(String):boolean
  +    
  +     /**
         * Set the state of a feature.
         *
         * Set the state of any feature in a SAX2 parser.  The parser
  @@ -940,14 +960,7 @@
         * reset all XML 1.0 components before parsing and namespace context
         */
        protected void reset() throws XNIException {
  -             // reset every component
                int count = fComponents.size();
  -             if (fConfigUpdated){
  -                     super.setFeature(PARSER_SETTINGS, true);
  -             }
  -             else {
  -                     super.setFeature(PARSER_SETTINGS, false);
  -             }
                for (int i = 0; i < count; i++) {
                        XMLComponent c = (XMLComponent) fComponents.elementAt(i);
                        c.reset(this);
  @@ -959,13 +972,6 @@
         * reset all common components before parsing
         */
        protected void resetCommon() throws XNIException {
  -             
  -             if (fConfigUpdated){
  -                     super.setFeature(PARSER_SETTINGS, true);
  -             }
  -             else {
  -                     super.setFeature(PARSER_SETTINGS, false);
  -             }
                // reset common components
                int count = fCommonComponents.size();
                for (int i = 0; i < count; i++) {
  @@ -980,12 +986,6 @@
         * reset all components before parsing and namespace context
         */
        protected void resetXML11() throws XNIException {
  -             if (fConfigUpdated){
  -                     super.setFeature(PARSER_SETTINGS, true);
  -             }
  -             else {
  -                     super.setFeature(PARSER_SETTINGS, false);
  -             }
                // reset every component
                int count = fXML11Components.size();
                for (int i = 0; i < count; i++) {                       
  @@ -1044,6 +1044,14 @@
               fLastComponent = fXML11NSDTDValidator;
   
           } else {
  +                     // create components
  +                       if (fXML11DocScanner == null) {
  +                                     // non namespace document pipeline
  +                                     fXML11DocScanner = new 
XML11DocumentScannerImpl();
  +                                     addXML11Component(fXML11DocScanner);
  +                                     fXML11DTDValidator = new XML11DTDValidator();
  +                                     addXML11Component(fXML11DTDValidator);
  +                       }
               if (fCurrentScanner != fXML11DocScanner) {
                   fCurrentScanner = fXML11DocScanner;
                   setProperty(DOCUMENT_SCANNER, fXML11DocScanner);
  @@ -1270,6 +1278,12 @@
                         if(feature.equals(Constants.SCHEMA_ELEMENT_DEFAULT)) {
                                 return;
                         }
  +                      
  +                      // special performance feature: only component manager is 
allowed to set it.                    
  +                      if (feature.equals(Constants.PARSER_SETTINGS)) {
  +                             short type = XMLConfigurationException.NOT_SUPPORTED;
  +                             throw new XMLConfigurationException(type, featureId);
  +                      }
   
           }
   
  @@ -1502,17 +1516,12 @@
               fXML11DTDProcessor = new XML11DTDProcessor();
               addXML11Component(fXML11DTDProcessor);
   
  -            // setup XML 1.1. document pipeline
  +            // setup XML 1.1. document pipeline - namespace aware
               fXML11NSDocScanner = new XML11NSDocumentScannerImpl();
               addXML11Component(fXML11NSDocScanner);
               fXML11NSDTDValidator = new XML11NSDTDValidator();
               addXML11Component(fXML11NSDTDValidator);
   
  -            // non namespace document pipeline
  -            fXML11DocScanner = new XML11DocumentScannerImpl();
  -            addXML11Component(fXML11DocScanner);
  -            fXML11DTDValidator = new XML11DTDValidator();
  -            addXML11Component(fXML11DTDValidator);
               
               if (fSchemaValidator != null)
                                addXML11Component(fSchemaValidator);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to