You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2015/02/08 21:48:27 UTC

svn commit: r1658252 - in /tomcat/taglibs/standard/trunk: ./ impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ impl/src/main/java/org/apache/taglibs/standard/tlv/ impl/src/main/java/org/apache/taglibs/standard/util/

Author: kkolinko
Date: Sun Feb  8 20:48:26 2015
New Revision: 1658252

URL: http://svn.apache.org/r1658252
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57547
Fix regression when running on older JREs.

Consistently use JAXP APIs to create a parser instead of using SAX API directly.

Modified:
    tomcat/taglibs/standard/trunk/CHANGES.txt
    tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ParseSupport.java
    tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java
    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

Modified: tomcat/taglibs/standard/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/CHANGES.txt?rev=1658252&r1=1658251&r2=1658252&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/CHANGES.txt (original)
+++ tomcat/taglibs/standard/trunk/CHANGES.txt Sun Feb  8 20:48:26 2015
@@ -1,3 +1,7 @@
+Changes in 1.2.3 release
+
+57547 Fix regression with running on older JREs
+
 Changes in 1.2.2 release [WITHDRAWN due to regressions in older JREs]
 
 57433 Double-check locking in ExpressionEvaluatorManager

Modified: tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ParseSupport.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ParseSupport.java?rev=1658252&r1=1658251&r2=1658252&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ParseSupport.java (original)
+++ tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/ParseSupport.java Sun Feb  8 20:48:26 2015
@@ -26,6 +26,7 @@ import javax.servlet.jsp.JspTagException
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.BodyTagSupport;
 import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.sax.TransformerHandler;
@@ -160,6 +161,8 @@ public abstract class ParseSupport exten
             throw new JspException(e);
         } catch (TransformerConfigurationException e) {
             throw new JspException(e);
+        } catch (ParserConfigurationException e) {
+            throw new JspException(e);
         }
     }
 

Modified: tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java
URL: http://svn.apache.org/viewvc/tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java?rev=1658252&r1=1658251&r2=1658252&view=diff
==============================================================================
--- tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java (original)
+++ tomcat/taglibs/standard/trunk/impl/src/main/java/org/apache/taglibs/standard/tag/common/xml/TransformSupport.java Sun Feb  8 20:48:26 2015
@@ -25,6 +25,7 @@ import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspTagException;
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.BodyTagSupport;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
@@ -115,6 +116,8 @@ public abstract class TransformSupport e
             }
         } catch (SAXException e) {
             throw new JspException(e);
+        } catch (ParserConfigurationException e) {
+            throw new JspException(e);
         }
 
         try {
@@ -152,6 +155,8 @@ public abstract class TransformSupport e
             throw new JspException(ex);
         } catch (SAXException e) {
             throw new JspException(e);
+        } catch (ParserConfigurationException e) {
+            throw new JspException(e);
         } finally {
             t = null;
         }
@@ -193,7 +198,7 @@ public abstract class TransformSupport e
      * @return the document Source
      * @throws JspTagException if there is a problem with the attribute
      */
-    Source getSourceFromXmlAttribute() throws JspTagException, SAXException {
+    Source getSourceFromXmlAttribute() throws JspTagException, SAXException, ParserConfigurationException {
         Object xml = this.xml;
         if (xml == null) {
             throw new JspTagException(Resources.getMessage("TRANSFORM_XML_IS_NULL"));
@@ -234,7 +239,7 @@ public abstract class TransformSupport e
      * @return the document Source
      * @throws JspTagException if there is a problem with the body content
      */
-    Source getSourceFromBodyContent() throws JspTagException, SAXException {
+    Source getSourceFromBodyContent() throws JspTagException, SAXException, ParserConfigurationException {
         if (bodyContent == null) {
             throw new JspTagException(Resources.getMessage("TRANSFORM_BODY_IS_NULL"));
         }

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=1658252&r1=1658251&r2=1658252&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 Feb  8 20:48:26 2015
@@ -31,6 +31,7 @@ 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 org.apache.taglibs.standard.resources.Resources;
 import org.apache.taglibs.standard.util.XmlUtil;
@@ -173,6 +174,8 @@ public abstract class JstlBaseTLV extend
             return vmFromString(ex.toString());
         } catch (IOException ex) {
             return vmFromString(ex.toString());
+        } catch (ParserConfigurationException 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=1658252&r1=1658251&r2=1658252&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 Feb  8 20:48:26 2015
@@ -29,7 +29,9 @@ import javax.servlet.jsp.PageContext;
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
@@ -46,6 +48,8 @@ import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.XMLReaderFactory;
 
@@ -64,6 +68,7 @@ public class XmlUtil {
      */
     private static final DocumentBuilderFactory PARSER_FACTORY;
     private static final SAXTransformerFactory TRANSFORMER_FACTORY;
+    private static final SAXParserFactory SAXPARSER_FACTORY;
     static {
         try {
             PARSER_FACTORY = runWithOurClassLoader(new Callable<DocumentBuilderFactory>() {
@@ -91,6 +96,20 @@ public class XmlUtil {
         } catch (TransformerConfigurationException e) {
             throw new ExceptionInInitializerError(e);
         }
+        try {
+            SAXPARSER_FACTORY = runWithOurClassLoader(new Callable<SAXParserFactory>() {
+                public SAXParserFactory call() {
+                    return SAXParserFactory.newInstance();
+                }
+            }, RuntimeException.class);
+            SAXPARSER_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);
+        }
     }
 
     /**
@@ -156,18 +175,15 @@ public class XmlUtil {
 
     /**
      * Create an XMLReader that resolves entities using JSTL semantics.
-     * @param entityResolver for resolving using JSTL semamtics
+     * @param entityResolver for resolving using JSTL semantics
      * @return a new XMLReader
+     * @throws ParserConfigurationException if there was a configuration problem creating the reader
      * @throws SAXException if there was a problem creating the reader
      */
-    public static XMLReader newXMLReader(JstlEntityResolver entityResolver) throws SAXException {
-        XMLReader xmlReader = runWithOurClassLoader(new Callable<XMLReader>() {
-            public XMLReader call() throws SAXException {
-                return XMLReaderFactory.createXMLReader();
-            }
-        }, SAXException.class);
+    public static XMLReader newXMLReader(JstlEntityResolver entityResolver)
+            throws ParserConfigurationException, SAXException {
+        XMLReader xmlReader = SAXPARSER_FACTORY.newSAXParser().getXMLReader();
         xmlReader.setEntityResolver(entityResolver);
-        xmlReader.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
         return xmlReader;
     }
 
@@ -178,9 +194,11 @@ public class XmlUtil {
      * @param systemId the system id
      * @param entityResolver for resolving using JSTL semamtics
      * @return a new SAXSource
+     * @throws ParserConfigurationException if there was a configuration problem creating the source
      * @throws SAXException if there was a problem creating the source
      */
-    public static SAXSource newSAXSource(Reader reader, String systemId, JstlEntityResolver entityResolver)  throws SAXException {
+    public static SAXSource newSAXSource(Reader reader, String systemId, JstlEntityResolver entityResolver)
+            throws ParserConfigurationException, SAXException {
         SAXSource source = new SAXSource(newXMLReader(entityResolver), new InputSource(reader));
         source.setSystemId(wrapSystemId(systemId));
         return source;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org