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