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: [email protected]
For additional commands, e-mail: [email protected]