From 145dbe4405c8ef476cfc41c3d291289fbcd74419 Mon Sep 17 00:00:00 2001 From: Martin Wegner Date: Thu, 10 Jan 2019 20:02:18 +0100 Subject: [PATCH] add try-catch-block for XMLConstants.ACCESS_EXTERNAL_DTD The XMLConstants.ACCESS_EXTERNAL_DTD property is not supported by every XML library. Since 3.0.6 I get this error: ContextLoader.initWebApplicationContext:312 - Context initialization failed java.lang.IllegalArgumentException: Unrecognized configuration feature: http://javax.xml.XMLConstants/property/accessExternalDTD at net.sf.saxon.Configuration.setConfigurationProperty(Configuration.java:4387) at net.sf.saxon.jaxp.SaxonTransformerFactory.setAttribute(SaxonTransformerFactory.java:311) at org.springframework.xml.transform.TransformerFactoryUtils.defaultSettings(TransformerFactoryUtils.java:53) at org.springframework.xml.transform.TransformerFactoryUtils.newInstance(TransformerFactoryUtils.java:32) at org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping.(PayloadRootAnnotationMethodEndpointMapping.java:58) --- .../xml/transform/TransformerFactoryUtils.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-xml/src/main/java/org/springframework/xml/transform/TransformerFactoryUtils.java b/spring-xml/src/main/java/org/springframework/xml/transform/TransformerFactoryUtils.java index b365b371e..b7693707a 100644 --- a/spring-xml/src/main/java/org/springframework/xml/transform/TransformerFactoryUtils.java +++ b/spring-xml/src/main/java/org/springframework/xml/transform/TransformerFactoryUtils.java @@ -19,12 +19,17 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * @author Greg Turnquist * @since 3.0.5 */ public class TransformerFactoryUtils { + private static final Log log = LogFactory.getLog(TransformerFactoryUtils.class); + /** * Build a new {@link TransformerFactory} using the default constructor. */ @@ -50,7 +55,13 @@ public static TransformerFactory newInstance(Class * Prevent external entities from accessing. */ private static TransformerFactory defaultSettings(TransformerFactory factory) { - factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + try { + factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + } catch (IllegalArgumentException e) { + if (log.isWarnEnabled()) { + log.warn(XMLConstants.ACCESS_EXTERNAL_DTD + " property not supported by " + factory.getClass().getCanonicalName()); + } + } factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); return factory; }