Author: markt
Date: Thu Nov 21 12:59:36 2013
New Revision: 1544165

URL: http://svn.apache.org/r1544165
Log:
Extend the reach of the Context attribute xmlValidation to cover XML parsing by 
Jasper the JSP engine.
Fix a TODO and enable validation (if required) for implicit TLD files.

Modified:
    tomcat/trunk/java/org/apache/catalina/Globals.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java
    tomcat/trunk/java/org/apache/jasper/Constants.java
    tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
    tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java
    tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java
    tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java
    tomcat/trunk/webapps/docs/config/context.xml

Modified: tomcat/trunk/java/org/apache/catalina/Globals.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Globals.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Globals.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Globals.java Thu Nov 21 12:59:36 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 {
 
     /**
@@ -273,4 +269,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/trunk/java/org/apache/catalina/core/ApplicationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Thu Nov 
21 12:59:36 2013
@@ -221,6 +221,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));
 
     }
@@ -234,6 +240,11 @@ public class ApplicationContext
     public Enumeration<String> getAttributeNames() {
         Set<String> names = new HashSet<>();
         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/trunk/java/org/apache/jasper/Constants.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Constants.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/Constants.java (original)
+++ tomcat/trunk/java/org/apache/jasper/Constants.java Thu Nov 21 12:59:36 2013
@@ -150,4 +150,13 @@ public class Constants {
      * the tomcat product installation path
      */
     public static final String CATALINA_HOME_PROP = "catalina.home";
+
+
+    /**
+     * 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/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java 
Thu Nov 21 12:59:36 2013
@@ -29,6 +29,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.tomcat.util.descriptor.tld.ImplicitTldRuleSet;
@@ -118,8 +119,10 @@ class ImplicitTagLibraryInfo extends Tag
                     try {
                         URL url = ctxt.getResource(path);
                         TldResourcePath resourcePath = new 
TldResourcePath(url, path);
-                        // TODO enable validation
-                        TldParser parser = new TldParser(true, false, new 
ImplicitTldRuleSet());
+                        boolean validate = Boolean.parseBoolean(
+                                ctxt.getServletContext().getInitParameter(
+                                        Constants.XML_VALIDATION_ATTR));
+                        TldParser parser = new TldParser(true, validate, new 
ImplicitTldRuleSet());
                         taglibXml = parser.parse(resourcePath);
                     } catch (IOException | SAXException e) {
                         err.jspError(e);

Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java Thu Nov 
21 12:59:36 2013
@@ -29,6 +29,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.apache.tomcat.util.descriptor.tld.TldResourcePath;
@@ -163,8 +164,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, jar, 
jspDocParser.ctxt);

Modified: tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java Thu Nov 21 
12:59:36 2013
@@ -25,8 +25,8 @@ import java.util.Map.Entry;
 
 import javax.servlet.ServletContext;
 
+import org.apache.jasper.Constants;
 import org.apache.jasper.JasperException;
-import org.apache.jasper.servlet.JasperInitializer;
 import org.apache.tomcat.util.descriptor.tld.TaglibXml;
 import org.apache.tomcat.util.descriptor.tld.TldParser;
 import org.apache.tomcat.util.descriptor.tld.TldResourcePath;
@@ -73,7 +73,7 @@ public class TldCache {
             this.tldResourcePathTaglibXmlMap.put(tldResourcePath, cacheEntry);
         }
         boolean validate = Boolean.parseBoolean(
-                servletContext.getInitParameter(JasperInitializer.VALIDATE));
+                
servletContext.getInitParameter(Constants.XML_VALIDATION_ATTR));
         tldParser = new TldParser(true, validate);
     }
 

Modified: tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java Thu Nov 
21 12:59:36 2013
@@ -24,6 +24,7 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.jsp.JspFactory;
 
+import org.apache.jasper.Constants;
 import org.apache.jasper.compiler.Localizer;
 import org.apache.jasper.compiler.TldCache;
 import org.apache.jasper.runtime.JspFactoryImpl;
@@ -36,11 +37,7 @@ import org.xml.sax.SAXException;
  * Initializer for the Jasper JSP Engine.
  */
 public class JasperInitializer implements ServletContainerInitializer {
-    /**
-     * Name of ServletContext initParam that determines if descriptor XML
-     * should be validated.
-     */
-    public static final String VALIDATE = 
"org.apache.jasper.validateDescriptors";
+
     private static final String MSG = 
"org.apache.jasper.servlet.JasperInitializer";
     private static final Log log = LogFactory.getLog(JasperInitializer.class);
 
@@ -81,7 +78,8 @@ public class JasperInitializer implement
             log.debug(Localizer.getMessage(MSG + ".onStartup", 
context.getServletContextName()));
         }
 
-        boolean validate = 
Boolean.parseBoolean(context.getInitParameter(VALIDATE));
+        boolean validate = Boolean.parseBoolean(
+                context.getInitParameter(Constants.XML_VALIDATION_ATTR));
 
         // scan the application for TLDs
         TldScanner scanner = new TldScanner(context, true, validate);

Modified: tomcat/trunk/webapps/docs/config/context.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/context.xml?rev=1544165&r1=1544164&r2=1544165&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/context.xml (original)
+++ tomcat/trunk/webapps/docs/config/context.xml Thu Nov 21 12:59:36 2013
@@ -531,8 +531,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

Reply via email to