You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/11/21 15:49:30 UTC

svn commit: r1544198 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/ java/org/apache/catalina/core/ java/org/apache/jasper/ java/org/apache/jasper/compiler/ java/org/apache/jasper/xmlparser/ webapps/docs/ webapps/docs/config/

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