You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2016/09/04 14:25:36 UTC
[7/9] ant git commit: use the undocumented TraX factory feature for
extensions
use the undocumented TraX factory feature for extensions
https://bz.apache.org/bugzilla/show_bug.cgi?id=60060
won't work until https://bugs.openjdk.java.net/browse/JDK-8165116 has
been fixed.
Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/7e55fea8
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/7e55fea8
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/7e55fea8
Branch: refs/heads/master
Commit: 7e55fea85d915ba19a4c8526d46dcf05fd415cf3
Parents: cac55fb
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Sep 4 15:54:33 2016 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Sep 4 15:54:33 2016 +0200
----------------------------------------------------------------------
.../optional/junit/AggregateTransformer.java | 36 +++++++++++++++++++-
.../ant/taskdefs/optional/TraXLiaisonTest.java | 2 ++
2 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant/blob/7e55fea8/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
----------------------------------------------------------------------
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 ec3506d..51be1b2 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
@@ -29,6 +29,8 @@ import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -43,6 +45,7 @@ import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.URLResource;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JAXPUtils;
+import org.apache.tools.ant.util.JavaEnvUtils;
import org.w3c.dom.Document;
/**
@@ -98,6 +101,11 @@ public class AggregateTransformer {
private XSLTProcess xsltTask;
/**
+ * The JAXP factory used for the internal XSLT task.
+ */
+ private XSLTProcess.Factory xsltFactory;
+
+ /**
* Instance of a utility class to use for file operations.
*
* @since Ant 1.7
@@ -231,7 +239,8 @@ public class AggregateTransformer {
* @since Ant 1.9.5
*/
public XSLTProcess.Factory createFactory() {
- return xsltTask.createFactory();
+ return xsltFactory != null ? xsltFactory
+ : (xsltFactory = xsltTask.createFactory());
}
/**
@@ -266,6 +275,7 @@ public class AggregateTransformer {
paramx.setProject(task.getProject());
paramx.setName("output.dir");
paramx.setExpression(toDir.getAbsolutePath());
+ configureForRedirectExtension();
final long t0 = System.currentTimeMillis();
try {
xsltTask.execute();
@@ -343,4 +353,28 @@ public class AggregateTransformer {
return JAXPUtils.getSystemId(file);
}
+ private static final String JDK_INTERNAL_FACTORY = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
+
+ /**
+ * If we end up using the JDK's own TraX factory on Java 9+, then
+ * set the features and attributes necessary to allow redirect
+ * extensions to be used.
+ * @since Ant 1.9.8
+ */
+ protected void configureForRedirectExtension() {
+ XSLTProcess.Factory factory = createFactory();
+ String factoryName = factory.getName();
+ if (factoryName == null) {
+ try {
+ factoryName = TransformerFactory.newInstance().getClass().getName();
+ } catch (TransformerFactoryConfigurationError exc) {
+ throw new BuildException(exc);
+ }
+ }
+ if (JDK_INTERNAL_FACTORY.equals(factoryName)
+ && JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
+ factory.addFeature(new XSLTProcess.Factory.Feature("http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions",
+ true));
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/ant/blob/7e55fea8/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java
----------------------------------------------------------------------
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 d4ff72a..f36a4db 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
@@ -67,6 +67,8 @@ public class TraXLiaisonTest extends AbstractXSLTLiaisonTest
}
File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl");
liaison.setStylesheet(xsl);
+ ((TraXLiaison) liaison)
+ .setFeature("http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions", true);
File out = new File("xalan2-redirect-out-dummy.tmp");
File in = getFile("/taskdefs/optional/xsltliaison-in.xsl");
ClassLoader orig = Thread.currentThread().getContextClassLoader();