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