Author: markt Date: Sat Jan 31 08:25:13 2009 New Revision: 739522 URL: http://svn.apache.org/viewvc?rev=739522&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45933 Don't use xml parser from web-app to process tld files
Modified: tomcat/tc6.0.x/trunk/ (props changed) tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/TldConfig.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc6.0.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Jan 31 08:25:13 2009 @@ -1 +1 @@ -/tomcat/trunk:601180,606992,612607,630314,652744,653247,673796,673820,683982,684001,684081,684234,684269-684270,685177,687503,687645,690781,691392,691805,692748,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,718360,719602,719626,719628,720046,720069,721040,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729809,729815,729934,730250,732859 +/tomcat/trunk:601180,606992,612607,630314,652744,653247,673796,673820,683982,684001,684081,684234,684269-684270,685177,687503,687645,690781,691392,691805,692748,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,718360,719602,719626,719628,720046,720069,721040,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729809,729815,729934,730250,732859 Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=739522&r1=739521&r2=739522&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Sat Jan 31 08:25:13 2009 @@ -89,15 +89,6 @@ 0: not sure what to serialize here, don't see it as necessary -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45933 - Don't use xml parser from web-app to process tld files - http://svn.apache.org/viewvc?rev=701355&view=rev - +1: markt, funkman, fhanik - -0: remm (it is a refactoring, and is not appropriate to me in 6.0.x) - markt - It is a refactoring but the refactoring was necessary - to change when TLDs were processed to avoid the bug. It - isn't refactoring for the sake of refactoring. - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45403 See commit message for details of negligable performance impact http://svn.apache.org/viewvc?rev=701358&view=rev Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java?rev=739522&r1=739521&r2=739522&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/StandardContext.java Sat Jan 31 08:25:13 2009 @@ -4268,10 +4268,6 @@ ((Lifecycle) pipeline).start(); } - if(getProcessTlds()) { - processTlds(); - } - // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(START_EVENT, null); @@ -4442,39 +4438,6 @@ //cacheContext(); } - /** - * Processes TLDs. - * - * @throws LifecycleException If an error occurs - */ - protected void processTlds() throws LifecycleException { - TldConfig tldConfig = new TldConfig(); - tldConfig.setContext(this); - - // (1) check if the attribute has been defined - // on the context element. - tldConfig.setTldValidation(tldValidation); - tldConfig.setTldNamespaceAware(tldNamespaceAware); - - // (2) if the attribute wasn't defined on the context - // try the host. - if (!tldValidation) { - tldConfig.setTldValidation - (((StandardHost) getParent()).getXmlValidation()); - } - - if (!tldNamespaceAware) { - tldConfig.setTldNamespaceAware - (((StandardHost) getParent()).getXmlNamespaceAware()); - } - - try { - tldConfig.execute(); - } catch (Exception ex) { - log.error("Error reading tld listeners " - + ex.toString(), ex); - } - } private void cacheContext() { try { @@ -5356,6 +5319,10 @@ return; } } + if (processTlds) { + this.addLifecycleListener(new TldConfig()); + } + super.init(); // Notify our interested LifecycleListeners Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties?rev=739522&r1=739521&r2=739522&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/LocalStrings.properties Sat Jan 31 08:25:13 2009 @@ -87,6 +87,8 @@ hostConfig.undeploy=Undeploying context [{0}] hostConfig.undeploy.error=Error undeploying web application at context path {0} hostConfig.undeploying=Undeploying deployed web applications +tldConfig.cce=Lifecycle event data object {0} is not a Context +tldConfig.execute=Error processing TLD files for context path {0} userConfig.database=Exception loading user database userConfig.deploy=Deploying web application for user {0} userConfig.deploying=Deploying user web applications Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/TldConfig.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/TldConfig.java?rev=739522&r1=739521&r2=739522&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/TldConfig.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/TldConfig.java Sat Jan 31 08:25:13 2009 @@ -48,20 +48,24 @@ import org.apache.catalina.Context; import org.apache.catalina.Globals; +import org.apache.catalina.Lifecycle; +import org.apache.catalina.LifecycleEvent; +import org.apache.catalina.LifecycleListener; import org.apache.catalina.core.StandardContext; +import org.apache.catalina.core.StandardHost; import org.apache.catalina.util.StringManager; import org.apache.tomcat.util.digester.Digester; import org.xml.sax.InputSource; /** - * Startup event listener for a <b>Context</b> that configures the properties - * of that Context, and the associated defined servlets. + * Startup event listener for a <b>Context</b> that configures application + * listeners configured in any TLD files. * * @author Craig R. McClanahan * @author Jean-Francois Arcand * @author Costin Manolache */ -public final class TldConfig { +public final class TldConfig implements LifecycleListener { // Names of JARs that are known not to contain any TLDs private static HashSet<String> noTldJars; @@ -393,20 +397,6 @@ } /** - * Create (if necessary) and return a Digester configured to process a tag - * library descriptor, looking for additional listener classes to be - * registered. - */ - private static Digester createTldDigester() { - - return DigesterFactory.newDigester(tldValidation, - tldNamespaceAware, - new TldRuleSet()); - - } - - - /** * Scan the JAR file at the specified resource path for TLDs in the * <code>META-INF</code> subdirectory, and scan each TLD for application * event listeners that need to be registered. @@ -508,10 +498,6 @@ private void tldScanStream(InputSource resourceStream) throws Exception { - if (tldDigester == null){ - tldDigester = createTldDigester(); - } - synchronized (tldDigester) { try { tldDigester.push(this); @@ -736,4 +722,51 @@ return jarPathMap; } + + public void lifecycleEvent(LifecycleEvent event) { + // Identify the context we are associated with + try { + context = (Context) event.getLifecycle(); + } catch (ClassCastException e) { + log.error(sm.getString("tldConfig.cce", event.getLifecycle()), e); + return; + } + + if (event.getType().equals(Lifecycle.INIT_EVENT)) { + init(); + } else if (event.getType().equals(Lifecycle.START_EVENT)) { + try { + execute(); + } catch (Exception e) { + log.error(sm.getString( + "tldConfig.execute", context.getPath()), e); + } + } // Ignore the other event types - nothing to do + } + + private void init() { + if (tldDigester == null){ + // (1) check if the attribute has been defined + // on the context element. + setTldValidation(context.getTldValidation()); + setTldNamespaceAware(context.getTldNamespaceAware()); + + // (2) if the attribute wasn't defined on the context + // try the host. + if (!tldValidation) { + setTldValidation( + ((StandardHost) context.getParent()).getXmlValidation()); + } + + if (!tldNamespaceAware) { + setTldNamespaceAware( + ((StandardHost) context.getParent()).getXmlNamespaceAware()); + } + + tldDigester = DigesterFactory.newDigester(tldValidation, + tldNamespaceAware, + new TldRuleSet()); + tldDigester.getParser(); + } + } } Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=739522&r1=739521&r2=739522&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Sat Jan 31 08:25:13 2009 @@ -192,6 +192,10 @@ Correct handle multi-level contexts defined using context.xml files. (markt) </fix> + <fix> + <bug>45933</bug>: Don't use xml parser from web-app to process tld + files. (markt) + </fix> <add> <bug>45951</bug>: Support changing of JSESSIONID cookie name and jsessionid path parameter name. Based on a patch by Jean-frederic Clere. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org