Author: markt Date: Thu Nov 21 14:49:30 2013 New Revision: 1544198 URL: http://svn.apache.org/r1544198 Log: Extend the reach of the Context attribute xmlValidation to cover XML parsing by Jasper the JSP engine.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/Constants.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/EmbeddedServletOptions.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspC.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspConfig.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java tomcat/tc7.0.x/trunk/java/org/apache/jasper/xmlparser/ParserUtils.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1544165 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java Thu Nov 21 14:49:30 2013 @@ -14,18 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.catalina; - /** * Global constants that are applicable to multiple packages within Catalina. * * @author Craig R. McClanahan * @version $Id$ */ - public final class Globals { /** @@ -310,4 +306,14 @@ public final class Globals { * the tomcat instance installation path */ public static final String CATALINA_BASE_PROP = "catalina.base"; + + + /** + * Name of the ServletContext attribute that determines if the JSP engine + * should validate *.tld, *.jspx and *.tagx files when parsing them. + * <p> + * This must be kept in sync with org.apache.japser.Constants + */ + public static final String JASPER_XML_VALIDATION_ATTR = + "org.apache.jasper.XML_VALIDATE"; } Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ApplicationContext.java Thu Nov 21 14:49:30 2013 @@ -235,6 +235,12 @@ public class ApplicationContext @Override public Object getAttribute(String name) { + // Special handling for XML validation as the context setting must + // always override anything that might have been set by an application. + if (Globals.JASPER_XML_VALIDATION_ATTR.equals(name) && + context.getXmlValidation()) { + return Boolean.TRUE; + } return (attributes.get(name)); } @@ -248,6 +254,11 @@ public class ApplicationContext public Enumeration<String> getAttributeNames() { Set<String> names = new HashSet<String>(); names.addAll(attributes.keySet()); + // Special handling for XML validation as this attribute will always be + // available if validation has been enabled on the context + if (context.getXmlValidation()) { + names.add(Globals.JASPER_XML_VALIDATION_ATTR); + } return Collections.enumeration(names); } Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/Constants.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/Constants.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/Constants.java Thu Nov 21 14:49:30 2013 @@ -14,14 +14,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.jasper; import java.util.Arrays; import java.util.Collections; import java.util.List; - /** * Some constants and other global data that are used by the compiler and the runtime. * @@ -233,4 +231,13 @@ public class Constants { */ public static final String TLD_JAR_SKIP_PROP= "org.apache.catalina.startup.TldConfig.jarsToSkip"; + + + /** + * Name of the ServletContext attribute that determines if the XML parsers + * used for *.tld, *.jspx and *.tagx files will be validating or not. + * <p> + * This must be kept in sync with org.apache.catalina.Globals + */ + public static final String XML_VALIDATION_ATTR = "org.apache.jasper.XML_VALIDATE"; } Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/EmbeddedServletOptions.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/EmbeddedServletOptions.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/EmbeddedServletOptions.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/EmbeddedServletOptions.java Thu Nov 21 14:49:30 2013 @@ -30,7 +30,6 @@ import org.apache.jasper.compiler.JspCon import org.apache.jasper.compiler.Localizer; import org.apache.jasper.compiler.TagPluginManager; import org.apache.jasper.compiler.TldLocationsCache; -import org.apache.jasper.xmlparser.ParserUtils; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -456,11 +455,7 @@ public final class EmbeddedServletOption String v=config.getInitParameter( k ); setProperty( k, v); } - - // quick hack - String validating=config.getInitParameter( "validating"); - if( "false".equals( validating )) ParserUtils.validating=false; - + String keepgen = config.getInitParameter("keepgenerated"); if (keepgen != null) { if (keepgen.equalsIgnoreCase("true")) { Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspC.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspC.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspC.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspC.java Thu Nov 21 14:49:30 2013 @@ -156,6 +156,7 @@ public class JspC extends Task implement protected URLClassLoader loader = null; protected boolean trimSpaces = false; protected boolean genStringAsCharArray = false; + protected boolean validateXml; protected boolean xpoweredBy; protected boolean mappedFile = false; protected boolean poolingEnabled = true; @@ -843,7 +844,11 @@ public class JspC extends Task implement } public void setValidateXml( boolean b ) { - org.apache.jasper.xmlparser.ParserUtils.validating=b; + this.validateXml = b; + } + + public boolean isValidateXml() { + return validateXml; } public void setListErrors( boolean b ) { Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java Thu Nov 21 14:49:30 2013 @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.jasper.compiler; import java.io.InputStream; @@ -29,6 +28,7 @@ import javax.servlet.jsp.tagext.TagFileI import javax.servlet.jsp.tagext.TagInfo; import javax.servlet.jsp.tagext.TagLibraryInfo; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.jasper.util.ExceptionUtils; @@ -124,7 +124,11 @@ class ImplicitTagLibraryInfo extends Tag pi.addDependant(path, ctxt.getLastModified(path)); } - ParserUtils pu = new ParserUtils(); + boolean validate = Boolean.parseBoolean( + ctxt.getServletContext().getInitParameter( + Constants.XML_VALIDATION_ATTR)); + + ParserUtils pu = new ParserUtils(validate); TreeNode tld = pu.parseXMLDocument(uri, in); if (tld.findAttribute("version") != null) { Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspConfig.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspConfig.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspConfig.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspConfig.java Thu Nov 21 14:49:30 2013 @@ -22,6 +22,7 @@ import java.util.Vector; import javax.servlet.ServletContext; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.xmlparser.ParserUtils; import org.apache.jasper.xmlparser.TreeNode; @@ -77,9 +78,12 @@ public class JspConfig { try { webXml = new WebXml(ctxt); + boolean validate = Boolean.parseBoolean( + ctxt.getInitParameter(Constants.XML_VALIDATION_ATTR)); + TreeNode webApp = null; if (webXml.getInputSource() != null) { - ParserUtils pu = new ParserUtils(); + ParserUtils pu = new ParserUtils(validate); webApp = pu.parseXMLDocument(webXml.getSystemId(), webXml.getInputSource()); } Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java Thu Nov 21 14:49:30 2013 @@ -30,6 +30,7 @@ import javax.servlet.jsp.tagext.TagLibra import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.xml.sax.Attributes; @@ -162,8 +163,13 @@ class JspDocumentParser jspDocParser.isTop = false; } + boolean validate = Boolean.parseBoolean( + pc.getJspCompilationContext().getServletContext().getInitParameter( + Constants.XML_VALIDATION_ATTR)); + jspDocParser.isValidating = validate; + // Parse the input - SAXParser saxParser = getSAXParser(false, jspDocParser); + SAXParser saxParser = getSAXParser(validate, jspDocParser); InputStream inStream = null; try { inStream = JspUtil.getInputStream(path, jarFile, Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagLibraryInfoImpl.java Thu Nov 21 14:49:30 2013 @@ -43,6 +43,7 @@ import javax.servlet.jsp.tagext.TagVaria import javax.servlet.jsp.tagext.ValidationMessage; import javax.servlet.jsp.tagext.VariableInfo; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.jasper.util.ExceptionUtils; @@ -212,8 +213,12 @@ class TagLibraryInfoImpl extends TagLibr Vector<TagFileInfo> tagFileVector = new Vector<TagFileInfo>(); Hashtable<String, FunctionInfo> functionTable = new Hashtable<String, FunctionInfo>(); + boolean validate = Boolean.parseBoolean( + ctxt.getServletContext().getInitParameter( + Constants.XML_VALIDATION_ATTR)); + // Create an iterator over the child elements of our <taglib> element - ParserUtils pu = new ParserUtils(); + ParserUtils pu = new ParserUtils(validate); TreeNode tld = pu.parseXMLDocument(uri, in); // Check to see if the <taglib> root element contains a 'version' Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java Thu Nov 21 14:49:30 2013 @@ -120,7 +120,7 @@ public class TagPluginManager { throws JasperException { TreeNode root = - (new ParserUtils()).parseXMLDocument(TAG_PLUGINS_XML, is); + (new ParserUtils(false)).parseXMLDocument(TAG_PLUGINS_XML, is); if (root == null) { return; } Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java Thu Nov 21 14:49:30 2013 @@ -286,9 +286,13 @@ public class TldLocationsCache { return; } + boolean validate = Boolean.parseBoolean( + ctxt.getInitParameter( + Constants.XML_VALIDATION_ATTR)); + // Parse the web application deployment descriptor TreeNode webtld = null; - webtld = new ParserUtils().parseXMLDocument(webXml.getSystemId(), + webtld = new ParserUtils(validate).parseXMLDocument(webXml.getSystemId(), webXml.getInputSource()); // Allow taglib to be an element of the root or jsp-config (JSP2.0) @@ -491,8 +495,12 @@ public class TldLocationsCache { // Parse the tag library descriptor at the specified resource path String uri = null; - TreeNode tld = - new ParserUtils().parseXMLDocument(resourcePath, stream); + boolean validate = Boolean.parseBoolean( + ctxt.getInitParameter( + Constants.XML_VALIDATION_ATTR)); + + TreeNode tld = new ParserUtils(validate).parseXMLDocument( + resourcePath, stream); TreeNode uriNode = tld.findChild("uri"); if (uriNode != null) { String body = uriNode.getBody(); Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/xmlparser/ParserUtils.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/xmlparser/ParserUtils.java?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/jasper/xmlparser/ParserUtils.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/xmlparser/ParserUtils.java Thu Nov 21 14:49:30 2013 @@ -63,9 +63,11 @@ public class ParserUtils { */ static EntityResolver entityResolver = new MyEntityResolver(); - // Turn off for JSP 2.0 until switch over to using xschema. - public static boolean validating = false; + private final boolean validating; + public ParserUtils(boolean validating) { + this.validating = validating; + } // --------------------------------------------------------- Public Methods Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Nov 21 14:49:30 2013 @@ -140,6 +140,10 @@ <bug>55798</bug>: Log an error if the MemoryUserDatabase is unable to find the specified user database file. (markt) </fix> + <add> + Extend the reach of the Context attribute xmlValidation to cover XML + parsing by Jasper the JSP engine. (markt) + </add> </changelog> </subsection> <subsection name="Coyote"> Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml?rev=1544198&r1=1544197&r2=1544198&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/config/context.xml Thu Nov 21 14:49:30 2013 @@ -554,8 +554,12 @@ </attribute> <attribute name="xmlValidation" required="false"> - <p>If the value of this flag is <code>true</code>, the XML files - will be validated on context startup. If the + <p>If the value of this flag is <code>true</code>, the parsing of + <code>web.xml</code>, <code>web-fragment.xml</code>, <code>*.tld</code>, + <code>*.jspx</code> and <code>*.tagx</code> files for this web + application will use a validating parser. Note that the + <code>tagPlugins.xml</code> file (if any) is never parsed using a + validating parser. If the <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> <a href="systemprops.html">system property</a> is set to <code>true</code>, the default value of this attribute will be --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org