mrglavas    2005/06/23 19:33:43

  Modified:    java/src/org/apache/xerces/parsers AbstractSAXParser.java
                        DOMParser.java
  Log:
  Performance: Every time parse is invoked on the JAXP SAXParser
  it sets the entity resolver and error handler which causes the
  underlying configuration to change. This forces components
  to read the whole config on every parse when they could
  otherwise break after examining the PARSER_SETTINGS feature.
  Instead of creating a new XMLEntityResolver or XMLErrorHandler
  each time setEntityResolver and setErrorHandler is called, set
  the entity resolver or error handler on the existing XMLEntityResolver
  or XMLErrorHandler.
  
  Applying the same performance fix to the DOMParser.
  
  Revision  Changes    Path
  1.59      +27 -7     
xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java
  
  Index: AbstractSAXParser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- AbstractSAXParser.java    2 May 2005 21:44:18 -0000       1.58
  +++ AbstractSAXParser.java    24 Jun 2005 02:33:43 -0000      1.59
  @@ -1265,13 +1265,26 @@
       public void setEntityResolver(EntityResolver resolver) {
   
           try {
  +            XMLEntityResolver xer = (XMLEntityResolver) 
fConfiguration.getProperty(ENTITY_RESOLVER);
               if (fUseEntityResolver2 && resolver instanceof EntityResolver2) {
  -                fConfiguration.setProperty(ENTITY_RESOLVER,
  -                    new EntityResolver2Wrapper((EntityResolver2) resolver));
  +                if (xer instanceof EntityResolver2Wrapper) {
  +                    EntityResolver2Wrapper er2w = (EntityResolver2Wrapper) 
xer;
  +                    er2w.setEntityResolver((EntityResolver2) resolver);
  +                }
  +                else {
  +                    fConfiguration.setProperty(ENTITY_RESOLVER,
  +                            new EntityResolver2Wrapper((EntityResolver2) 
resolver));
  +                }
               }
               else {
  -                fConfiguration.setProperty(ENTITY_RESOLVER,
  -                    new EntityResolverWrapper(resolver));
  +                if (xer instanceof EntityResolverWrapper) {
  +                    EntityResolverWrapper erw = (EntityResolverWrapper) xer;
  +                    erw.setEntityResolver(resolver);
  +                }
  +                else {
  +                    fConfiguration.setProperty(ENTITY_RESOLVER,
  +                            new EntityResolverWrapper(resolver));
  +                }
               }
           }
           catch (XMLConfigurationException e) {
  @@ -1330,8 +1343,15 @@
       public void setErrorHandler(ErrorHandler errorHandler) {
   
           try {
  -            fConfiguration.setProperty(ERROR_HANDLER,
  -                                       new 
ErrorHandlerWrapper(errorHandler));
  +            XMLErrorHandler xeh = (XMLErrorHandler) 
fConfiguration.getProperty(ERROR_HANDLER);
  +            if (xeh instanceof ErrorHandlerWrapper) {
  +                ErrorHandlerWrapper ehw = (ErrorHandlerWrapper) xeh;
  +                ehw.setErrorHandler(errorHandler);
  +            }
  +            else {
  +                fConfiguration.setProperty(ERROR_HANDLER,
  +                        new ErrorHandlerWrapper(errorHandler));
  +            }
           }
           catch (XMLConfigurationException e) {
               // do nothing
  
  
  
  1.77      +27 -7     
xml-xerces/java/src/org/apache/xerces/parsers/DOMParser.java
  
  Index: DOMParser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/DOMParser.java,v
  retrieving revision 1.76
  retrieving revision 1.77
  diff -u -r1.76 -r1.77
  --- DOMParser.java    20 Jun 2005 04:47:59 -0000      1.76
  +++ DOMParser.java    24 Jun 2005 02:33:43 -0000      1.77
  @@ -273,13 +273,26 @@
       public void setEntityResolver(EntityResolver resolver) {
   
           try {
  +            XMLEntityResolver xer = (XMLEntityResolver) 
fConfiguration.getProperty(ENTITY_RESOLVER);
               if (fUseEntityResolver2 && resolver instanceof EntityResolver2) {
  -                fConfiguration.setProperty(ENTITY_RESOLVER,
  -                    new EntityResolver2Wrapper((EntityResolver2) resolver));
  +                if (xer instanceof EntityResolver2Wrapper) {
  +                    EntityResolver2Wrapper er2w = (EntityResolver2Wrapper) 
xer;
  +                    er2w.setEntityResolver((EntityResolver2) resolver);
  +                }
  +                else {
  +                    fConfiguration.setProperty(ENTITY_RESOLVER,
  +                            new EntityResolver2Wrapper((EntityResolver2) 
resolver));
  +                }
               }
               else {
  -                fConfiguration.setProperty(ENTITY_RESOLVER,
  -                    new EntityResolverWrapper(resolver));
  +                if (xer instanceof EntityResolverWrapper) {
  +                    EntityResolverWrapper erw = (EntityResolverWrapper) xer;
  +                    erw.setEntityResolver(resolver);
  +                }
  +                else {
  +                    fConfiguration.setProperty(ENTITY_RESOLVER,
  +                            new EntityResolverWrapper(resolver));
  +                }
               }
           }
           catch (XMLConfigurationException e) {
  @@ -340,8 +353,15 @@
       public void setErrorHandler(ErrorHandler errorHandler) {
   
           try {
  -            fConfiguration.setProperty(ERROR_HANDLER,
  -                                       new 
ErrorHandlerWrapper(errorHandler));
  +            XMLErrorHandler xeh = (XMLErrorHandler) 
fConfiguration.getProperty(ERROR_HANDLER);
  +            if (xeh instanceof ErrorHandlerWrapper) {
  +                ErrorHandlerWrapper ehw = (ErrorHandlerWrapper) xeh;
  +                ehw.setErrorHandler(errorHandler);
  +            }
  +            else {
  +                fConfiguration.setProperty(ERROR_HANDLER,
  +                        new ErrorHandlerWrapper(errorHandler));
  +            }
           }
           catch (XMLConfigurationException e) {
               // do nothing
  
  
  

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

Reply via email to