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