git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1158470 13f79535-47bb-0310-9956-ffa450edef68master
@@ -13,6 +13,9 @@ Changes that could break older environments: | |||||
Fixed bugs: | Fixed bugs: | ||||
----------- | ----------- | ||||
* <junitreport> did not work in embedded environments on JDK 7. | |||||
Bugzilla Report 51668. | |||||
* Encoding of unicode escape sequences by the property file task | * Encoding of unicode escape sequences by the property file task | ||||
Bugzilla Report 50515. | Bugzilla Report 50515. | ||||
@@ -26,6 +26,7 @@ import java.io.FileOutputStream; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | import java.io.InputStream; | ||||
import java.io.OutputStream; | import java.io.OutputStream; | ||||
import java.lang.reflect.Field; | |||||
import java.util.Hashtable; | import java.util.Hashtable; | ||||
import java.util.Vector; | import java.util.Vector; | ||||
import java.util.Enumeration; | import java.util.Enumeration; | ||||
@@ -417,6 +418,17 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
throw new BuildException(e); | throw new BuildException(e); | ||||
} | } | ||||
} | } | ||||
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) { | |||||
project.log(x.toString(), Project.MSG_DEBUG); | |||||
} | |||||
} | |||||
tfactory.setErrorListener(this); | tfactory.setErrorListener(this); | ||||
// specific attributes for the transformer | // specific attributes for the transformer | ||||
@@ -431,6 +443,11 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware | |||||
} | } | ||||
return tfactory; | return tfactory; | ||||
} | } | ||||
/** | |||||
* Not part of any stable API. | |||||
* @see #51668 | |||||
*/ | |||||
public static final ThreadLocal/*<Boolean>*/ DISABLE_SECURE_PROCESSING = new ThreadLocal(); | |||||
/** | /** | ||||
@@ -38,6 +38,7 @@ import org.apache.tools.ant.Task; | |||||
import org.apache.tools.ant.taskdefs.XSLTProcess; | import org.apache.tools.ant.taskdefs.XSLTProcess; | ||||
import org.apache.tools.ant.taskdefs.Delete; | import org.apache.tools.ant.taskdefs.Delete; | ||||
import org.apache.tools.ant.taskdefs.TempFile; | import org.apache.tools.ant.taskdefs.TempFile; | ||||
import org.apache.tools.ant.taskdefs.optional.TraXLiaison; | |||||
import org.apache.tools.ant.util.JAXPUtils; | import org.apache.tools.ant.util.JAXPUtils; | ||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
@@ -260,10 +261,13 @@ public class AggregateTransformer { | |||||
paramx.setName("output.dir"); | paramx.setName("output.dir"); | ||||
paramx.setExpression(toDir.getAbsolutePath()); | paramx.setExpression(toDir.getAbsolutePath()); | ||||
final long t0 = System.currentTimeMillis(); | final long t0 = System.currentTimeMillis(); | ||||
TraXLiaison.DISABLE_SECURE_PROCESSING.set(Boolean.TRUE); | |||||
try { | try { | ||||
xsltTask.execute(); | xsltTask.execute(); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
throw new BuildException("Errors while applying transformations: " + e.getMessage(), e); | throw new BuildException("Errors while applying transformations: " + e.getMessage(), e); | ||||
} finally { | |||||
TraXLiaison.DISABLE_SECURE_PROCESSING.set(null); | |||||
} | } | ||||
final long dt = System.currentTimeMillis() - t0; | final long dt = System.currentTimeMillis() - t0; | ||||
task.log("Transform time: " + dt + "ms"); | task.log("Transform time: " + dt + "ms"); | ||||
@@ -19,7 +19,9 @@ | |||||
package org.apache.tools.ant.taskdefs.optional.junit; | package org.apache.tools.ant.taskdefs.optional.junit; | ||||
import java.io.File; | import java.io.File; | ||||
import java.io.FileOutputStream; | |||||
import java.io.PrintWriter; | import java.io.PrintWriter; | ||||
import java.security.Permission; | |||||
import junit.framework.TestCase; | import junit.framework.TestCase; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.taskdefs.Delete; | import org.apache.tools.ant.taskdefs.Delete; | ||||
@@ -32,11 +34,17 @@ public class XMLResultAggregatorTest extends TestCase { | |||||
} | } | ||||
public void testFrames() throws Exception { | public void testFrames() throws Exception { | ||||
// For now, skip this test on JDK 6 (and below); see below for why: | |||||
try { | |||||
Class.forName("java.nio.file.Files"); | |||||
} catch (ClassNotFoundException x) { | |||||
return; | |||||
} | |||||
final File d = new File(System.getProperty("java.io.tmpdir"), "XMLResultAggregatorTest"); | final File d = new File(System.getProperty("java.io.tmpdir"), "XMLResultAggregatorTest"); | ||||
new Delete() {{removeDir(d);}}; // is there no utility method for this? | new Delete() {{removeDir(d);}}; // is there no utility method for this? | ||||
assertTrue(d.getAbsolutePath(), d.mkdir()); | assertTrue(d.getAbsolutePath(), d.mkdir()); | ||||
File xml = new File(d, "x.xml"); | File xml = new File(d, "x.xml"); | ||||
PrintWriter pw = new PrintWriter(xml); | |||||
PrintWriter pw = new PrintWriter(new FileOutputStream(xml)); | |||||
try { | try { | ||||
pw.println("<testsuite errors='0' failures='0' name='my.UnitTest' tests='1'>"); | pw.println("<testsuite errors='0' failures='0' name='my.UnitTest' tests='1'>"); | ||||
pw.println(" <testcase classname='my.UnitTest' name='testSomething'/>"); | pw.println(" <testcase classname='my.UnitTest' name='testSomething'/>"); | ||||
@@ -55,6 +63,20 @@ public class XMLResultAggregatorTest extends TestCase { | |||||
Project project = new Project(); | Project project = new Project(); | ||||
project.init(); | project.init(); | ||||
task.setProject(project); | task.setProject(project); | ||||
/* getResourceAsStream override unnecessary on JDK 7. Ought to work around JAXP #6723276 in JDK 6, but causes a TypeCheckError in FunctionCall for reasons TBD: | |||||
Thread.currentThread().setContextClassLoader(new ClassLoader(ClassLoader.getSystemClassLoader().getParent()) { | |||||
public InputStream getResourceAsStream(String name) { | |||||
if (name.startsWith("META-INF/services/")) { | |||||
return new ByteArrayInputStream(new byte[0]); | |||||
} | |||||
return super.getResourceAsStream(name); | |||||
} | |||||
}); | |||||
*/ | |||||
// Use the JRE's Xerces, not lib/optional/xerces.jar: | |||||
Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader().getParent()); | |||||
// Tickle #51668: | |||||
System.setSecurityManager(new SecurityManager() {public void checkPermission(Permission perm) {}}); | |||||
task.execute(); | task.execute(); | ||||
assertTrue(new File(d, "index.html").isFile()); | assertTrue(new File(d, "index.html").isFile()); | ||||
} | } | ||||