You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2005/06/24 04:33:43 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/parsers AbstractSAXParser.java DOMParser.java

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: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org