Author: jboynes Date: Sun Nov 30 23:32:00 2014 New Revision: 1642613 URL: http://svn.apache.org/r1642613 Log: JSTL TLVs use common parser
Added: tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java (with props) Modified: tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tlv/JstlBaseTLV.java tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/util/XmlUtil.java tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/PermittedTaglibsTLV.java tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ScriptFreeTLV.java Modified: tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tlv/JstlBaseTLV.java URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tlv/JstlBaseTLV.java?rev=1642613&r1=1642612&r2=1642613&view=diff ============================================================================== --- tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tlv/JstlBaseTLV.java (original) +++ tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tlv/JstlBaseTLV.java Sun Nov 30 23:32:00 2014 @@ -18,6 +18,7 @@ package org.apache.taglibs.standard.tlv; import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -30,13 +31,13 @@ import javax.servlet.jsp.tagext.PageData import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagLibraryValidator; import javax.servlet.jsp.tagext.ValidationMessage; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; import org.apache.taglibs.standard.resources.Resources; +import org.apache.taglibs.standard.util.XmlUtil; import org.xml.sax.Attributes; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; /** @@ -149,11 +150,18 @@ public abstract class JstlBaseTLV extend DefaultHandler h = getHandler(); // parse the page - SAXParserFactory f = SAXParserFactory.newInstance(); - f.setValidating(false); - f.setNamespaceAware(true); - SAXParser p = f.newSAXParser(); - p.parse(page.getInputStream(), h); + XMLReader xmlReader = XmlUtil.newXMLReader(null); + xmlReader.setContentHandler(h); + InputStream inputStream = page.getInputStream(); + try { + xmlReader.parse(new InputSource(inputStream)); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + // Suppressed. + } + } if (messageVector.size() == 0) { return null; @@ -163,8 +171,6 @@ public abstract class JstlBaseTLV extend } catch (SAXException ex) { return vmFromString(ex.toString()); - } catch (ParserConfigurationException ex) { - return vmFromString(ex.toString()); } catch (IOException ex) { return vmFromString(ex.toString()); } Modified: tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/util/XmlUtil.java URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/util/XmlUtil.java?rev=1642613&r1=1642612&r2=1642613&view=diff ============================================================================== --- tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/util/XmlUtil.java (original) +++ tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/util/XmlUtil.java Sun Nov 30 23:32:00 2014 @@ -167,6 +167,7 @@ public class XmlUtil { } }, SAXException.class); xmlReader.setEntityResolver(entityResolver); + xmlReader.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); return xmlReader; } Added: tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java?rev=1642613&view=auto ============================================================================== --- tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java (added) +++ tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java Sun Nov 30 23:32:00 2014 @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package javax.servlet.jsp.jstl.tlv; + +import java.io.IOException; +import java.io.InputStream; +import java.security.AccessController; +import java.security.PrivilegedAction; + +import javax.servlet.jsp.tagext.PageData; +import javax.xml.XMLConstants; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; +import org.xml.sax.helpers.DefaultHandler; + +/** + * Support class for working with the SAX Parser. + */ +class ParserUtil { + + private static final SAXParserFactory PARSER_FACTORY; + static { + PARSER_FACTORY = AccessController.doPrivileged(new PrivilegedAction<SAXParserFactory>() { + public SAXParserFactory run() { + ClassLoader original = Thread.currentThread().getContextClassLoader(); + ClassLoader ours = ParserUtil.class.getClassLoader(); + try { + if (original != ours) { + Thread.currentThread().setContextClassLoader(ours); + } + return SAXParserFactory.newInstance(); + } finally { + if (original != ours) { + Thread.currentThread().setContextClassLoader(original); + } + } + } + }); + try { + PARSER_FACTORY.setValidating(true); + PARSER_FACTORY.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + } catch (ParserConfigurationException e) { + throw new ExceptionInInitializerError(e); + } catch (SAXNotRecognizedException e) { + throw new ExceptionInInitializerError(e); + } catch (SAXNotSupportedException e) { + throw new ExceptionInInitializerError(e); + } + } + + private ParserUtil() { + } + + static void parse(PageData pageData, DefaultHandler handler) throws ParserConfigurationException, SAXException, IOException { + SAXParser parser = PARSER_FACTORY.newSAXParser(); + InputStream is = pageData.getInputStream(); + try { + parser.parse(is, handler); + } finally { + try { + is.close(); + } catch (IOException e) { + // Suppress. + } + } + } +} Propchange: tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ParserUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/PermittedTaglibsTLV.java URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/PermittedTaglibsTLV.java?rev=1642613&r1=1642612&r2=1642613&view=diff ============================================================================== --- tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/PermittedTaglibsTLV.java (original) +++ tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/PermittedTaglibsTLV.java Sun Nov 30 23:32:00 2014 @@ -14,10 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package javax.servlet.jsp.jstl.tlv; import java.io.IOException; +import java.io.InputStream; import java.util.HashSet; import java.util.Set; import java.util.StringTokenizer; @@ -94,10 +94,8 @@ public class PermittedTaglibsTLV extends // Validation entry point @Override - public synchronized ValidationMessage[] validate( - String prefix, String uri, PageData page) { + public synchronized ValidationMessage[] validate(String prefix, String uri, PageData page) { try { - // initialize this.uri = uri; permittedTaglibs = readConfiguration(); @@ -106,10 +104,7 @@ public class PermittedTaglibsTLV extends DefaultHandler h = new PermittedTaglibsHandler(); // parse the page - SAXParserFactory f = SAXParserFactory.newInstance(); - f.setValidating(true); - SAXParser p = f.newSAXParser(); - p.parse(page.getInputStream(), h); + ParserUtil.parse(page, h); if (failed) { return vmFromString( Modified: tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ScriptFreeTLV.java URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ScriptFreeTLV.java?rev=1642613&r1=1642612&r2=1642613&view=diff ============================================================================== --- tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ScriptFreeTLV.java (original) +++ tomcat/taglibs/standard/trunk/spec/src/main/java/javax/servlet/jsp/jstl/tlv/ScriptFreeTLV.java Sun Nov 30 23:32:00 2014 @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package javax.servlet.jsp.jstl.tlv; import java.io.IOException; @@ -25,7 +24,6 @@ import javax.servlet.jsp.tagext.PageData import javax.servlet.jsp.tagext.TagLibraryValidator; import javax.servlet.jsp.tagext.ValidationMessage; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; @@ -105,36 +103,18 @@ public class ScriptFreeTLV extends TagLi * containing one or more messages indicating why the page is not valid. */ @Override - public ValidationMessage[] validate - (String prefix, String uri, PageData page) { - InputStream in = null; - SAXParser parser; - MyContentHandler handler = new MyContentHandler(); + public ValidationMessage[] validate(String prefix, String uri, PageData page) { try { - synchronized (factory) { - parser = factory.newSAXParser(); - } - in = page.getInputStream(); - parser.parse(in, handler); - } - catch (ParserConfigurationException e) { + MyContentHandler handler = new MyContentHandler(); + ParserUtil.parse(page, handler); + return handler.reportResults(); + } catch (ParserConfigurationException e) { return vmFromString(e.toString()); - } - catch (SAXException e) { + } catch (SAXException e) { return vmFromString(e.toString()); - } - catch (IOException e) { + } catch (IOException e) { return vmFromString(e.toString()); } - finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - } - } - } - return handler.reportResults(); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org