diff --git a/WHATSNEW b/WHATSNEW index 4bbecb999..6fddaf5b2 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -17,7 +17,8 @@ Fixed bugs: Bugzilla Report 51049. * did not work in embedded environments on JDK 7. - Bugzilla Report 51668. + Nor did when using Xalan redirects. + Bugzilla Report 51668, 52382. * Encoding of unicode escape sequences by the property file task Bugzilla Report 50515. diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java index 5b536fd0a..338426291 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java @@ -419,12 +419,12 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware } } - if (Boolean.TRUE.equals(DISABLE_SECURE_PROCESSING.get())) { - try { - Field _isNotSecureProcessing = tfactory.getClass().getDeclaredField("_isNotSecureProcessing"); - _isNotSecureProcessing.setAccessible(true); - _isNotSecureProcessing.set(tfactory, Boolean.TRUE); - } catch (Exception x) { + try { // #51668, #52382 + Field _isNotSecureProcessing = tfactory.getClass().getDeclaredField("_isNotSecureProcessing"); + _isNotSecureProcessing.setAccessible(true); + _isNotSecureProcessing.set(tfactory, Boolean.TRUE); + } catch (Exception x) { + if (project != null) { project.log(x.toString(), Project.MSG_DEBUG); } } @@ -443,11 +443,6 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware } return tfactory; } - /** - * Not part of any stable API. - * @see #51668 - */ - public static final ThreadLocal/**/ DISABLE_SECURE_PROCESSING = new ThreadLocal(); /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java index 2c2bace09..35b7a0015 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java @@ -261,13 +261,10 @@ public class AggregateTransformer { paramx.setName("output.dir"); paramx.setExpression(toDir.getAbsolutePath()); final long t0 = System.currentTimeMillis(); - TraXLiaison.DISABLE_SECURE_PROCESSING.set(Boolean.TRUE); try { xsltTask.execute(); } catch (Exception e) { throw new BuildException("Errors while applying transformations: " + e.getMessage(), e); - } finally { - TraXLiaison.DISABLE_SECURE_PROCESSING.set(null); } final long dt = System.currentTimeMillis() - t0; task.log("Transform time: " + dt + "ms"); diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java index 5c3a76a67..8a50fba66 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java @@ -5,7 +5,10 @@ import org.apache.tools.ant.taskdefs.XSLTLogger; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.util.JAXPUtils; +import java.io.ByteArrayInputStream; import java.io.File; +import java.io.InputStream; +import java.security.Permission; import junit.framework.AssertionFailedError; @@ -65,11 +68,26 @@ public class TraXLiaisonTest extends AbstractXSLTLiaisonTest liaison.setStylesheet(xsl); File out = new File("xalan2-redirect-out-dummy.tmp"); File in = getFile("/taskdefs/optional/xsltliaison-in.xsl"); + ClassLoader orig = Thread.currentThread().getContextClassLoader(); try { liaison.addParam("xalan-version", "2"); + // Use the JRE's Xerces, not lib/optional/xerces.jar: + Thread.currentThread().setContextClassLoader(new ClassLoader(ClassLoader.getSystemClassLoader().getParent()) { + public InputStream getResourceAsStream(String name) { + if (name.startsWith("META-INF/services/")) { + // work around JAXP #6723276 in JDK 6 + return new ByteArrayInputStream(new byte[0]); + } + return super.getResourceAsStream(name); + } + }); + // Tickle #52382: + System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); liaison.transform(in, out); } finally { out.delete(); + Thread.currentThread().setContextClassLoader(orig); + System.setSecurityManager(null); } }