git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@417020 13f79535-47bb-0310-9956-ffa450edef68master
@@ -2,7 +2,10 @@ Changes from current Ant 1.6.5 version to current SVN version | |||||
============================================================= | ============================================================= | ||||
Changes that could break older environments: | Changes that could break older environments: | ||||
-------------------------------------------- | |||||
------------------------------------------- | |||||
* Removed support for xalan1 completely. Users of Xalan1 for ant builds will | |||||
have to stay at ant 1.6.5 or upgrade to xalan2. | |||||
* Improved recursion detection for lines with multiple matches of same token on one single line. | * Improved recursion detection for lines with multiple matches of same token on one single line. | ||||
Bugzilla report 38456. | Bugzilla report 38456. | ||||
@@ -200,13 +200,6 @@ | |||||
</or> | </or> | ||||
</selector> | </selector> | ||||
<selector id="needs.xalan1"> | |||||
<or> | |||||
<filename name="${optional.package}/XalanLiaison*"/> | |||||
<filename name="${optional.package}/junit/Xalan1Executor*"/> | |||||
</or> | |||||
</selector> | |||||
<selector id="needs.apache-resolver"> | <selector id="needs.apache-resolver"> | ||||
<filename name="${apache.resolver.type.package}/**"/> | <filename name="${apache.resolver.type.package}/**"/> | ||||
</selector> | </selector> | ||||
@@ -407,9 +400,6 @@ | |||||
<available property="apache.resolver.present" | <available property="apache.resolver.present" | ||||
classname="org.apache.xml.resolver.tools.CatalogResolver" | classname="org.apache.xml.resolver.tools.CatalogResolver" | ||||
classpathref="classpath"/> | classpathref="classpath"/> | ||||
<available property="xalan.present" | |||||
classname="org.apache.xalan.xslt.XSLTProcessorFactory" | |||||
classpathref="classpath"/> | |||||
<available property="xalan2.present" | <available property="xalan2.present" | ||||
classname="org.apache.xalan.transformer.TransformerImpl" | classname="org.apache.xalan.transformer.TransformerImpl" | ||||
classpathref="classpath"/> | classpathref="classpath"/> | ||||
@@ -657,7 +647,6 @@ | |||||
<selector refid="needs.sun.b64" unless="base64.present"/> | <selector refid="needs.sun.b64" unless="base64.present"/> | ||||
<selector refid="needs.trax" unless="trax.present"/> | <selector refid="needs.trax" unless="trax.present"/> | ||||
<selector refid="needs.xalan1" unless="xalan.present"/> | |||||
<selector refid="needs.apache-resolver" unless="apache.resolver.present"/> | <selector refid="needs.apache-resolver" unless="apache.resolver.present"/> | ||||
<selector refid="needs.junit" unless="junit.present"/> | <selector refid="needs.junit" unless="junit.present"/> | ||||
<selector refid="needs.apache-regexp" | <selector refid="needs.apache-regexp" | ||||
@@ -838,7 +827,6 @@ | |||||
<not> | <not> | ||||
<or> | <or> | ||||
<selector refid="needs.trax"/> | <selector refid="needs.trax"/> | ||||
<selector refid="needs.xalan1"/> | |||||
<selector refid="needs.apache-resolver"/> | <selector refid="needs.apache-resolver"/> | ||||
<selector refid="needs.junit"/> | <selector refid="needs.junit"/> | ||||
<selector refid="needs.apache-regexp"/> | <selector refid="needs.apache-regexp"/> | ||||
@@ -883,7 +871,6 @@ | |||||
</macrodef> | </macrodef> | ||||
<optional-jar dep="trax"/> | <optional-jar dep="trax"/> | ||||
<optional-jar dep="xalan1"/> | |||||
<optional-jar dep="apache-resolver"/> | <optional-jar dep="apache-resolver"/> | ||||
<optional-jar dep="junit"/> | <optional-jar dep="junit"/> | ||||
<optional-jar dep="apache-regexp"/> | <optional-jar dep="apache-regexp"/> | ||||
@@ -1698,10 +1685,6 @@ | |||||
unless="trax.impl.present"/> | unless="trax.impl.present"/> | ||||
<!-- needs xerces to work --> | <!-- needs xerces to work --> | ||||
<exclude name="${optional.package}/XalanLiaisonTest.java" | |||||
unless="bsf.present"/> | |||||
<exclude name="${optional.package}/XalanLiaisonTest.java" | |||||
unless="xerces1.present"/> | |||||
<exclude name="${ant.package}/IncludeTest.java" | <exclude name="${ant.package}/IncludeTest.java" | ||||
unless="xerces1.present"/> | unless="xerces1.present"/> | ||||
<exclude name="${type.package}/selectors/ModifiedSelectorTest.java" | <exclude name="${type.package}/selectors/ModifiedSelectorTest.java" | ||||
@@ -1813,8 +1813,7 @@ mv /tmp/foo $ANT_HOME/bin/antRun | |||||
"offending" jar out of <code>ANT_HOME/lib</code>. For the | "offending" jar out of <code>ANT_HOME/lib</code>. For the | ||||
<code><junit></code> task it would be | <code><junit></code> task it would be | ||||
<code>ant-junit.jar</code> and for <code><style></code> | <code>ant-junit.jar</code> and for <code><style></code> | ||||
it would be <code>ant-trax.jar</code>, | |||||
<code>ant-xalan1.jar</code> or <code>ant-xslp.jar</code> - | |||||
it would be <code>ant-trax.jar</code> or <code>ant-xslp.jar</code> - | |||||
depending on the processor you use.</p> | depending on the processor you use.</p> | ||||
<p>If you do so, you will have to <code><taskdef></code> | <p>If you do so, you will have to <code><taskdef></code> | ||||
all optional tasks that need the external library and use | all optional tasks that need the external library and use | ||||
@@ -114,20 +114,12 @@ element which is used to perform Entity and URI resolution.</p> | |||||
<td valign="top">processor</td> | <td valign="top">processor</td> | ||||
<td valign="top">name of the XSLT processor to use. | <td valign="top">name of the XSLT processor to use. | ||||
Permissible values are :<ul> | |||||
Permissible value is :<ul> | |||||
<li>"trax" for a TraX compliant processor (ie JAXP interface | <li>"trax" for a TraX compliant processor (ie JAXP interface | ||||
implementation such as Xalan 2 or Saxon)</li> | |||||
<li>"xalan" for | |||||
the Apache XML Xalan (version 1) processor</li> | |||||
<li>the name of a custom class implementing the interface | |||||
<code>org.apache.tools.ant.taskdefs.XSLTLiaison.</code></li> | |||||
</ul> | |||||
Defaults to trax, followed by xalan | |||||
The first one found in your class | |||||
path is the one that is used. | |||||
implementation such as Xalan 2 or Saxon)</li></ul> | |||||
Defaults to trax. | |||||
<br/> | <br/> | ||||
<em><strong>DEPRECATED</strong> - xalan (xalan1) is deprecated and no | |||||
more supported.</em>. | |||||
Support for xalan1 has been removed in ant 1.7. | |||||
</td> | </td> | ||||
<td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
</tr> | </tr> | ||||
@@ -29,12 +29,13 @@ out of the box. The table below summarize the compatibility status. | |||||
<tr><td>XSLTC</td><td>JDK 1.5.x</td><td>OK</td></tr> | <tr><td>XSLTC</td><td>JDK 1.5.x</td><td>OK</td></tr> | ||||
<tr><td>2.x</td><td>JDK 1.4.x</td><td>DEPRECATED<br><i>Use ${ant.home}/etc/junit-frames-xalan1.xsl | <tr><td>2.x</td><td>JDK 1.4.x</td><td>DEPRECATED<br><i>Use ${ant.home}/etc/junit-frames-xalan1.xsl | ||||
<br> Upgrade Xalan using the JDK endorsement mechanism</i></td></tr> | <br> Upgrade Xalan using the JDK endorsement mechanism</i></td></tr> | ||||
<tr><td>1.2</td><td>N/A</td><td>DEPRECATED<br><i>Use ${ant.home}/etc/junit-frames-xalan1.xsl</i><td></tr> | |||||
</table> | </table> | ||||
<p>With Ant 1.6.2 we had to decide between supporting Xalan-J 1/Xalan J 2.4.1- | <p>With Ant 1.6.2 we had to decide between supporting Xalan-J 1/Xalan J 2.4.1- | ||||
and Xalan 2.4.1+/XSLTC, since there was no way to support both couples at the same | and Xalan 2.4.1+/XSLTC, since there was no way to support both couples at the same | ||||
time.</p> | time.</p> | ||||
<p>With Ant 1.7 we had to drop support Xalan-J 1, since Xalan-J 1 has not | |||||
available anymore for quite some time.</p> | |||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
<table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
@@ -99,10 +99,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
private static final String TRAX_LIAISON_CLASS = | private static final String TRAX_LIAISON_CLASS = | ||||
"org.apache.tools.ant.taskdefs.optional.TraXLiaison"; | "org.apache.tools.ant.taskdefs.optional.TraXLiaison"; | ||||
/** Name of the now-deprecated Xalan liaison class */ | |||||
private static final String XALAN_LIAISON_CLASS = | |||||
"org.apache.tools.ant.taskdefs.optional.XalanLiaison"; | |||||
/** Utilities used for file operations */ | /** Utilities used for file operations */ | ||||
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | ||||
@@ -163,11 +159,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public static final String PROCESSOR_TRAX = "trax"; | public static final String PROCESSOR_TRAX = "trax"; | ||||
/** | |||||
* The xalan1 processor (deprecated option) | |||||
* @since Ant 1.7 | |||||
*/ | |||||
public static final String PROCESSOR_XALAN1 = "xalan"; | |||||
/** | /** | ||||
* Creates a new XSLTProcess Task. | * Creates a new XSLTProcess Task. | ||||
@@ -493,10 +484,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
String classname; | String classname; | ||||
if (proc.equals(PROCESSOR_TRAX)) { | if (proc.equals(PROCESSOR_TRAX)) { | ||||
classname = TRAX_LIAISON_CLASS; | classname = TRAX_LIAISON_CLASS; | ||||
} else if (proc.equals(PROCESSOR_XALAN1)) { | |||||
log("DEPRECATED - xalan processor is deprecated. Use trax " | |||||
+ "instead."); | |||||
classname = XALAN_LIAISON_CLASS; | |||||
} else { | } else { | ||||
//anything else is a classname | //anything else is a classname | ||||
classname = proc; | classname = proc; | ||||
@@ -753,12 +740,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||||
try { | try { | ||||
resolveProcessor(PROCESSOR_TRAX); | resolveProcessor(PROCESSOR_TRAX); | ||||
} catch (Throwable e1) { | } catch (Throwable e1) { | ||||
try { | |||||
resolveProcessor(PROCESSOR_XALAN1); | |||||
} catch (Throwable e2) { | |||||
e2.printStackTrace(); | |||||
throw new BuildException(e1); | |||||
} | |||||
e1.printStackTrace(); | |||||
throw new BuildException(e1); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -1,116 +0,0 @@ | |||||
/* | |||||
* Copyright 2000-2002,2004-2005 The Apache Software Foundation | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional; | |||||
import java.io.File; | |||||
import java.io.FileInputStream; | |||||
import java.io.FileOutputStream; | |||||
import java.io.IOException; | |||||
import org.apache.tools.ant.taskdefs.XSLTLiaison; | |||||
import org.apache.xalan.xslt.XSLTInputSource; | |||||
import org.apache.xalan.xslt.XSLTProcessor; | |||||
import org.apache.xalan.xslt.XSLTProcessorFactory; | |||||
import org.apache.xalan.xslt.XSLTResultTarget; | |||||
/** | |||||
* Concrete liaison for Xalan 1.x API. | |||||
* | |||||
* @since Ant 1.1 | |||||
*/ | |||||
public class XalanLiaison implements XSLTLiaison { | |||||
protected XSLTProcessor processor; | |||||
protected File stylesheet; | |||||
/** | |||||
* Constructor for XalanLiaison. | |||||
* @throws Exception on error | |||||
*/ | |||||
public XalanLiaison() throws Exception { | |||||
processor = XSLTProcessorFactory.getProcessor(); | |||||
} | |||||
/** | |||||
* Set the style sheet to use. | |||||
* @param stylesheet the style sheet file to use | |||||
* @throws Exception on error | |||||
*/ | |||||
public void setStylesheet(File stylesheet) throws Exception { | |||||
this.stylesheet = stylesheet; | |||||
} | |||||
/** | |||||
* Carry out the transformation. | |||||
* @param infile the input file | |||||
* @param outfile the output file | |||||
* @throws Exception on error | |||||
*/ | |||||
public void transform(File infile, File outfile) throws Exception { | |||||
FileInputStream fis = null; | |||||
FileOutputStream fos = null; | |||||
FileInputStream xslStream = null; | |||||
try { | |||||
xslStream = new FileInputStream(stylesheet); | |||||
fis = new FileInputStream(infile); | |||||
fos = new FileOutputStream(outfile); | |||||
// systemid such as file:/// + getAbsolutePath() are considered | |||||
// invalid here... | |||||
XSLTInputSource xslSheet = new XSLTInputSource(xslStream); | |||||
xslSheet.setSystemId(stylesheet.getAbsolutePath()); | |||||
XSLTInputSource src = new XSLTInputSource(fis); | |||||
src.setSystemId(infile.getAbsolutePath()); | |||||
XSLTResultTarget res = new XSLTResultTarget(fos); | |||||
processor.process(src, xslSheet, res); | |||||
} finally { | |||||
// make sure to close all handles, otherwise the garbage | |||||
// collector will close them...whenever possible and | |||||
// Windows may complain about not being able to delete files. | |||||
try { | |||||
if (xslStream != null) { | |||||
xslStream.close(); | |||||
} | |||||
} catch (IOException ignored) { | |||||
//ignore | |||||
} | |||||
try { | |||||
if (fis != null) { | |||||
fis.close(); | |||||
} | |||||
} catch (IOException ignored) { | |||||
//ignore | |||||
} | |||||
try { | |||||
if (fos != null) { | |||||
fos.close(); | |||||
} | |||||
} catch (IOException ignored) { | |||||
//ignore | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* Add a parameter. | |||||
* @param name the name of the parameter | |||||
* @param value the value of the parameter | |||||
*/ | |||||
public void addParam(String name, String value) { | |||||
processor.setStylesheetParam(name, value); | |||||
} | |||||
} //-- XalanLiaison |
@@ -1,81 +0,0 @@ | |||||
/* | |||||
* Copyright 2001-2002,2004 The Apache Software Foundation | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.junit; | |||||
import java.io.OutputStream; | |||||
import org.apache.xalan.xslt.XSLTInputSource; | |||||
import org.apache.xalan.xslt.XSLTProcessor; | |||||
import org.apache.xalan.xslt.XSLTProcessorFactory; | |||||
import org.apache.xalan.xslt.XSLTResultTarget; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.xml.sax.SAXException; | |||||
/** | |||||
* Xalan 1 executor. It will need a lot of things in the classpath: | |||||
* xerces for the serialization, xalan and bsf for the extension. | |||||
* @todo do everything via reflection to avoid compile problems ? | |||||
* | |||||
* @ant.task ignore="true" | |||||
*/ | |||||
public class Xalan1Executor extends XalanExecutor { | |||||
private static final String xsltP = "org.apache.xalan.xslt.XSLTProcessor"; | |||||
XSLTProcessor processor = null; | |||||
public Xalan1Executor() { | |||||
try { | |||||
processor = XSLTProcessorFactory.getProcessor(); | |||||
} catch (SAXException e) { | |||||
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. | |||||
} | |||||
} | |||||
protected String getImplementation() { | |||||
return processor.getClass().getName(); | |||||
} | |||||
protected String getProcVersion(String classNameImpl) | |||||
throws BuildException { | |||||
try { | |||||
// xalan 1 | |||||
if (classNameImpl.equals(xsltP)) { | |||||
return getXalanVersion(xsltP + "Version"); | |||||
} | |||||
throw new BuildException("Could not find a valid processor version" | |||||
+ " implementation from " | |||||
+ classNameImpl); | |||||
} catch (ClassNotFoundException e) { | |||||
throw new BuildException("Could not find processor version " | |||||
+ "implementation", e); | |||||
} | |||||
} | |||||
void execute() throws Exception { | |||||
// need to quote otherwise it breaks because of "extra illegal tokens" | |||||
processor.setStylesheetParam("output.dir", "'" | |||||
+ caller.toDir.getAbsolutePath() + "'"); | |||||
XSLTInputSource xml_src = new XSLTInputSource(caller.document); | |||||
String system_id = caller.getStylesheetSystemId(); | |||||
XSLTInputSource xsl_src = new XSLTInputSource(system_id); | |||||
OutputStream os = getOutputStream(); | |||||
try { | |||||
XSLTResultTarget target = new XSLTResultTarget(os); | |||||
processor.process(xml_src, xsl_src, target); | |||||
} finally { | |||||
os.close(); | |||||
} | |||||
} | |||||
} |
@@ -60,9 +60,8 @@ abstract class XalanExecutor { | |||||
abstract void execute() throws Exception; | abstract void execute() throws Exception; | ||||
/** | /** | ||||
* Create a valid Xalan executor. It checks first if Xalan2 is | |||||
* present, if not it checks for xalan1. If none is available, it | |||||
* fails. | |||||
* Create a valid Xalan executor. It checks if Xalan2 is | |||||
* present. If none is available, it fails. | |||||
* @param caller object containing the transformation information. | * @param caller object containing the transformation information. | ||||
* @throws BuildException thrown if it could not find a valid xalan | * @throws BuildException thrown if it could not find a valid xalan | ||||
* executor. | * executor. | ||||
@@ -75,15 +74,9 @@ abstract class XalanExecutor { | |||||
executor = (XalanExecutor) clazz.newInstance(); | executor = (XalanExecutor) clazz.newInstance(); | ||||
} catch (Exception xsltcApacheMissing) { | } catch (Exception xsltcApacheMissing) { | ||||
caller.task.log(xsltcApacheMissing.toString()); | caller.task.log(xsltcApacheMissing.toString()); | ||||
try { | |||||
Class clazz = Class.forName(PACKAGE + "Xalan1Executor"); | |||||
executor = (XalanExecutor) clazz.newInstance(); | |||||
} catch (Exception xalan1Missing) { | |||||
caller.task.log(xalan1Missing.toString()); | |||||
throw new BuildException("Could not find xstlc nor xalan2 nor " | |||||
+ "xalan1 in the classpath. Check " | |||||
throw new BuildException("Could not find xstlc nor xalan2 " | |||||
+ "in the classpath. Check " | |||||
+ "http://xml.apache.org/xalan-j"); | + "http://xml.apache.org/xalan-j"); | ||||
} | |||||
} | } | ||||
String classNameImpl = executor.getImplementation(); | String classNameImpl = executor.getImplementation(); | ||||
String version = executor.getProcVersion(classNameImpl); | String version = executor.getProcVersion(classNameImpl); | ||||
@@ -1,56 +0,0 @@ | |||||
/* | |||||
* Copyright 2001-2002,2004 The Apache Software Foundation | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
* | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional; | |||||
import org.apache.tools.ant.taskdefs.XSLTLiaison; | |||||
import java.io.File; | |||||
/** | |||||
* Xalan Liaison testcase | |||||
*/ | |||||
public class XalanLiaisonTest extends AbstractXSLTLiaisonTest { | |||||
public XalanLiaisonTest(String name){ | |||||
super(name); | |||||
} | |||||
public void tearDown() { | |||||
File f = new File("xalan1-redirect-out.tmp"); | |||||
if (f.exists()) { | |||||
f.delete(); | |||||
} | |||||
} | |||||
protected XSLTLiaison createLiaison() throws Exception { | |||||
return new XalanLiaison(); | |||||
} | |||||
public void testXalan1Redirect() throws Exception { | |||||
File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl"); | |||||
liaison.setStylesheet(xsl); | |||||
File out = new File("xalan1-redirect-out-dummy.tmp"); | |||||
File in = getFile("/taskdefs/optional/xsltliaison-in.xsl"); | |||||
try { | |||||
liaison.addParam("xalan-version", "1"); | |||||
liaison.transform(in, out); | |||||
} finally { | |||||
out.delete(); | |||||
} | |||||
} | |||||
} | |||||
@@ -1568,8 +1568,8 @@ mv /tmp/foo $ANT_HOME/bin/antRun | |||||
"offending" jar out of <code>ANT_HOME/lib</code>. For the | "offending" jar out of <code>ANT_HOME/lib</code>. For the | ||||
<code><junit></code> task it would be | <code><junit></code> task it would be | ||||
<code>ant-junit.jar</code> and for <code><style></code> | <code>ant-junit.jar</code> and for <code><style></code> | ||||
it would be <code>ant-trax.jar</code>, | |||||
<code>ant-xalan1.jar</code> or <code>ant-xslp.jar</code> - | |||||
it would be <code>ant-trax.jar</code> | |||||
or <code>ant-xslp.jar</code> - | |||||
depending on the processor you use.</p> | depending on the processor you use.</p> | ||||
<p>If you do so, you will have to <code><taskdef></code> | <p>If you do so, you will have to <code><taskdef></code> | ||||