Bugzilla Report 39407 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@409378 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -419,6 +419,9 @@ Other changes: | |||
| * <scp> now optionally supports the sftp protocol. Bugzilla Report 39373. | |||
| * resources can now be used to indicate the location of the stylesheet to use | |||
| in <xslt>. Bugzilla Report 39407. | |||
| Changes from Ant 1.6.4 to Ant 1.6.5 | |||
| =================================== | |||
| @@ -82,12 +82,15 @@ element which is used to perform Entity and URI resolution.</p> | |||
| <td valign="top">name of the stylesheet to use - given either relative | |||
| to the project's basedir or as an absolute path.<br/> | |||
| <br/> | |||
| Alternatively, a nested element which ant can interpret as a resource | |||
| can be used to indicate where to find the stylesheet<br/> | |||
| <em>deprecated variation :</em> <br/> | |||
| If the stylesheet cannot be found, and if you have specified the | |||
| attribute basedir for the task, ant will assume that the style | |||
| attribute is relative to the basedir of the task. | |||
| </td> | |||
| <td align="center" valign="top">Yes</td> | |||
| <td align="center" valign="top">No, if you specify the location of | |||
| the stylesheet as a nested resource element</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">classpath</td> | |||
| @@ -348,6 +351,13 @@ used by <code><xslt></code> removes the file extension from the | |||
| source file and adds the extension specified via the extension | |||
| attribute.</p> | |||
| <h4>nested element of type resource to indicate the stylesheet</h4> | |||
| <p><em>Since Ant 1.7</em></p> | |||
| <p>You can use nested elements which extend resource to indicate the stylesheet. | |||
| See <a href="../CoreTypes/resources.html">resources</a> to see the concrete syntax you can use</p> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| @@ -407,6 +417,14 @@ attribute.</p> | |||
| style="style/apache.xsl"> | |||
| <mapper type="glob" from="*.xml.en" to="*.html.en"/> | |||
| </xslt></pre> | |||
| <h4>Using a nested resource to define the stylesheet</h4> | |||
| <pre> | |||
| <xslt in="data.xml" out="${out.dir}/out.xml"> | |||
| <url url="${printParams.xsl.url}"/> | |||
| <param name="set" expression="value"/> | |||
| </xslt></pre> | |||
| </blockquote> | |||
| <hr> | |||
| <p align="center">Copyright © 2000-2006 The Apache Software Foundation. All rights | |||
| @@ -107,4 +107,26 @@ | |||
| </copy> | |||
| </target> | |||
| <target name="testWithStyleAttrAndResource"> | |||
| <property name="value" value="myvalue"/> | |||
| <xslt in="data.xml" out="${out.dir}/out.xml" style="printParams.xsl"> | |||
| <file file="printParams.xsl"/> | |||
| </xslt> | |||
| </target> | |||
| <target name="testWithFileResource"> | |||
| <xslt in="data.xml" out="${out.dir}/out.xml"> | |||
| <file file="printParams.xsl"/> | |||
| <param name="set" expression="value"/> | |||
| </xslt> | |||
| </target> | |||
| <target name="testWithUrlResource"> | |||
| <makeurl file="printParams.xsl" property="printParams.xsl.url"/> | |||
| <xslt in="data.xml" out="${out.dir}/out.xml"> | |||
| <url url="${printParams.xsl.url}"/> | |||
| <param name="set" expression="value"/> | |||
| </xslt> | |||
| </target> | |||
| </project> | |||
| @@ -0,0 +1,34 @@ | |||
| /* | |||
| * Copyright 2006 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; | |||
| import org.apache.tools.ant.types.Resource; | |||
| /** | |||
| * Extends Proxy interface for XSLT processors. | |||
| * | |||
| * @see XSLTProcess | |||
| * @since Ant 1.7 | |||
| */ | |||
| public interface XSLTLiaison3 extends XSLTLiaison2 { | |||
| /** | |||
| * sets the stylesheet to use as a resource | |||
| * @param stylesheet the stylesheet to use as a resource | |||
| * @throws Exception if the stylesheet cannot be loaded | |||
| */ | |||
| void setStylesheet(Resource stylesheet) throws Exception; | |||
| } | |||
| @@ -54,9 +54,12 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| /** where to find the source XML file, default is the project's basedir */ | |||
| private File baseDir = null; | |||
| /** XSL stylesheet */ | |||
| /** XSL stylesheet as a filename */ | |||
| private String xslFile = null; | |||
| /** XSL stylesheet as a {@link org.apache.tools.ant.types.Resource} */ | |||
| private Resource xslResource = null; | |||
| /** extension of the files produced by XSL processing */ | |||
| private String targetExtension = ".html"; | |||
| @@ -217,7 +220,17 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| * @since Ant 1.7 | |||
| */ | |||
| public void add(ResourceCollection rc) { | |||
| resources.add(rc); | |||
| resources.add(rc); | |||
| } | |||
| /** | |||
| * Adds the XSLT stylesheet as a resource | |||
| * @param xslResource the stylesheet as a | |||
| * {@link org.apache.tools.ant.types.Resource} | |||
| * @since Ant 1.7 | |||
| */ | |||
| public void addConfigured(Resource xslResource) { | |||
| this.xslResource = xslResource; | |||
| } | |||
| /** | |||
| @@ -231,7 +244,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| mapper.add(fileNameMapper); | |||
| addMapper(mapper); | |||
| } | |||
| /** | |||
| * Executes the task. | |||
| * | |||
| @@ -240,7 +253,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| */ | |||
| public void execute() throws BuildException { | |||
| if ("style".equals(getTaskType())) { | |||
| log("Warning: the task name <style> is deprecated. Use <xslt> instead.", Project.MSG_WARN); | |||
| log("Warning: the task name <style> is deprecated. Use <xslt> instead.", | |||
| Project.MSG_WARN); | |||
| } | |||
| File savedBaseDir = baseDir; | |||
| @@ -249,8 +263,17 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| String[] list; | |||
| String[] dirs; | |||
| if (xslFile == null) { | |||
| throw new BuildException("no stylesheet specified", getLocation()); | |||
| if (xslResource == null && xslFile == null) { | |||
| throw new BuildException("specify the " | |||
| + "stylesheet either as a filename in style " | |||
| + "attribute or as a nested resource", getLocation()); | |||
| } | |||
| if (xslResource != null && xslFile != null) { | |||
| throw new BuildException("specify the " | |||
| + "stylesheet either as a filename in style " | |||
| + "attribute or as a nested resource but not " | |||
| + "as both", getLocation()); | |||
| } | |||
| if (inFile != null && !inFile.exists()) { | |||
| @@ -272,23 +295,31 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| log("Using " + liaison.getClass().toString(), Project.MSG_VERBOSE); | |||
| File stylesheet = getProject().resolveFile(xslFile); | |||
| if (!stylesheet.exists()) { | |||
| stylesheet = FILE_UTILS.resolveFile(baseDir, xslFile); | |||
| /* | |||
| * shouldn't throw out deprecation warnings before we know, | |||
| * the wrong version has been used. | |||
| */ | |||
| if (stylesheet.exists()) { | |||
| log("DEPRECATED - the 'style' attribute should be relative " | |||
| + "to the project's"); | |||
| log(" basedir, not the tasks's basedir."); | |||
| if (xslFile != null) { | |||
| // If we enter here, it means that the stylesheet is supplied | |||
| // via style attribute | |||
| File stylesheet = FILE_UTILS.resolveFile(getProject().getBaseDir(), xslFile); | |||
| if (!stylesheet.exists()) { | |||
| stylesheet = FILE_UTILS.resolveFile(baseDir, xslFile); | |||
| /* | |||
| * shouldn't throw out deprecation warnings before we know, | |||
| * the wrong version has been used. | |||
| */ | |||
| if (stylesheet.exists()) { | |||
| log("DEPRECATED - the 'style' attribute should be relative " | |||
| + "to the project's"); | |||
| log(" basedir, not the tasks's basedir."); | |||
| } | |||
| } | |||
| FileResource fr = new FileResource(); | |||
| fr.setProject(getProject()); | |||
| fr.setFile(stylesheet); | |||
| xslResource = fr; | |||
| } | |||
| // if we have an in file and out then process them | |||
| if (inFile != null && outFile != null) { | |||
| process(inFile, outFile, stylesheet); | |||
| process(inFile, outFile, xslResource); | |||
| return; | |||
| } | |||
| @@ -298,34 +329,34 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| */ | |||
| //-- make sure destination directory exists... | |||
| checkDest(); | |||
| checkDest(); | |||
| if (useImplicitFileset) { | |||
| scanner = getDirectoryScanner(baseDir); | |||
| log("Transforming into " + destDir, Project.MSG_INFO); | |||
| if (useImplicitFileset) { | |||
| scanner = getDirectoryScanner(baseDir); | |||
| log("Transforming into " + destDir, Project.MSG_INFO); | |||
| // Process all the files marked for styling | |||
| list = scanner.getIncludedFiles(); | |||
| for (int i = 0; i < list.length; ++i) { | |||
| process(baseDir, list[i], destDir, stylesheet); | |||
| } | |||
| if (performDirectoryScan) { | |||
| // Process all the directories marked for styling | |||
| dirs = scanner.getIncludedDirectories(); | |||
| for (int j = 0; j < dirs.length; ++j) { | |||
| list = new File(baseDir, dirs[j]).list(); | |||
| for (int i = 0; i < list.length; ++i) { | |||
| process(baseDir, dirs[j] + File.separator + list[i], | |||
| destDir, stylesheet); | |||
| // Process all the files marked for styling | |||
| list = scanner.getIncludedFiles(); | |||
| for (int i = 0; i < list.length; ++i) { | |||
| process(baseDir, list[i], destDir, xslResource); | |||
| } | |||
| if (performDirectoryScan) { | |||
| // Process all the directories marked for styling | |||
| dirs = scanner.getIncludedDirectories(); | |||
| for (int j = 0; j < dirs.length; ++j) { | |||
| list = new File(baseDir, dirs[j]).list(); | |||
| for (int i = 0; i < list.length; ++i) { | |||
| process(baseDir, dirs[j] + File.separator + list[i], | |||
| destDir, xslResource); | |||
| } | |||
| } | |||
| } | |||
| } else { // only resource collections, there better be some | |||
| if (resources.size() == 0) { | |||
| throw new BuildException("no resources specified"); | |||
| } | |||
| } | |||
| } else { // only resource collections, there better be some | |||
| if (resources.size() == 0) { | |||
| throw new BuildException("no resources specified"); | |||
| } | |||
| } | |||
| processResources(stylesheet); | |||
| processResources(xslResource); | |||
| } finally { | |||
| if (loader != null) { | |||
| loader.resetThreadContextLoader(); | |||
| @@ -337,7 +368,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| baseDir = savedBaseDir; | |||
| } | |||
| } | |||
| /** | |||
| * Set whether to check dependencies, or always generate; | |||
| * optional, default is false. | |||
| @@ -434,11 +465,11 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| * | |||
| * <p>Set this to false if you want explicit control with nested | |||
| * resource collections.</p> | |||
| * | |||
| * @param useimplicitfileset set to true if you want to use implicit fileset | |||
| * @since Ant 1.7 | |||
| */ | |||
| public void setUseImplicitFileset(boolean b) { | |||
| useImplicitFileset = b; | |||
| public void setUseImplicitFileset(boolean useimplicitfileset) { | |||
| useImplicitFileset = useimplicitfileset; | |||
| } | |||
| /** | |||
| @@ -461,7 +492,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| private void resolveProcessor(String proc) throws Exception { | |||
| String classname; | |||
| 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."); | |||
| @@ -531,24 +562,24 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| * | |||
| * @since Ant 1.7 | |||
| */ | |||
| private void processResources(File stylesheet) { | |||
| Iterator iter = resources.iterator(); | |||
| while (iter.hasNext()) { | |||
| Resource r = (Resource) iter.next(); | |||
| if (!r.isExists()) { | |||
| continue; | |||
| } | |||
| File base = baseDir; | |||
| String name = r.getName(); | |||
| if (r instanceof FileResource) { | |||
| FileResource f = (FileResource) r; | |||
| base = f.getBaseDir(); | |||
| if (base == null) { | |||
| name = f.getFile().getAbsolutePath(); | |||
| } | |||
| } | |||
| process(base, name, destDir, stylesheet); | |||
| } | |||
| private void processResources(Resource stylesheet) { | |||
| Iterator iter = resources.iterator(); | |||
| while (iter.hasNext()) { | |||
| Resource r = (Resource) iter.next(); | |||
| if (!r.isExists()) { | |||
| continue; | |||
| } | |||
| File base = baseDir; | |||
| String name = r.getName(); | |||
| if (r instanceof FileResource) { | |||
| FileResource f = (FileResource) r; | |||
| base = f.getBaseDir(); | |||
| if (base == null) { | |||
| name = f.getFile().getAbsolutePath(); | |||
| } | |||
| } | |||
| process(base, name, destDir, stylesheet); | |||
| } | |||
| } | |||
| /** | |||
| @@ -562,14 +593,14 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| * @exception BuildException if the processing fails. | |||
| */ | |||
| private void process(File baseDir, String xmlFile, File destDir, | |||
| File stylesheet) | |||
| Resource stylesheet) | |||
| throws BuildException { | |||
| File outF = null; | |||
| File inF = null; | |||
| try { | |||
| long styleSheetLastModified = stylesheet.lastModified(); | |||
| long styleSheetLastModified = stylesheet.getLastModified(); | |||
| inF = new File(baseDir, xmlFile); | |||
| if (inF.isDirectory()) { | |||
| @@ -628,10 +659,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| * @param stylesheet the stylesheet to use. | |||
| * @exception BuildException if the processing fails. | |||
| */ | |||
| private void process(File inFile, File outFile, File stylesheet) | |||
| private void process(File inFile, File outFile, Resource stylesheet) | |||
| throws BuildException { | |||
| try { | |||
| long styleSheetLastModified = stylesheet.lastModified(); | |||
| long styleSheetLastModified = stylesheet.getLastModified(); | |||
| log("In file " + inFile + " time: " + inFile.lastModified(), | |||
| Project.MSG_DEBUG); | |||
| log("Out file " + outFile + " time: " + outFile.lastModified(), | |||
| @@ -917,10 +948,24 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| /** | |||
| * Loads the stylesheet and set xsl:param parameters. | |||
| * | |||
| * @param stylesheet the file form which to load the stylesheet. | |||
| * @param stylesheet the file from which to load the stylesheet. | |||
| * @exception BuildException if the stylesheet cannot be loaded. | |||
| * @deprecated since Ant 1.7 | |||
| */ | |||
| protected void configureLiaison(File stylesheet) throws BuildException { | |||
| FileResource fr = new FileResource(); | |||
| fr.setProject(getProject()); | |||
| fr.setFile(stylesheet); | |||
| configureLiaison(fr); | |||
| } | |||
| /** | |||
| * Loads the stylesheet and set xsl:param parameters. | |||
| * | |||
| * @param stylesheet the resource from which to load the stylesheet. | |||
| * @exception BuildException if the stylesheet cannot be loaded. | |||
| * @since Ant 1.7 | |||
| */ | |||
| protected void configureLiaison(Resource stylesheet) throws BuildException { | |||
| if (stylesheetLoaded && reuseLoadedStylesheet) { | |||
| return; | |||
| } | |||
| @@ -928,16 +973,35 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
| try { | |||
| log("Loading stylesheet " + stylesheet, Project.MSG_INFO); | |||
| liaison.setStylesheet(stylesheet); | |||
| // We call liason.configure() and then liaison.setStylesheet() | |||
| // so that the internal variables of liaison can be set up | |||
| if (liaison instanceof XSLTLiaison2) { | |||
| ((XSLTLiaison2) liaison).configure(this); | |||
| } | |||
| if (liaison instanceof XSLTLiaison3) { | |||
| // If we are here we can set the stylesheet as a | |||
| // resource | |||
| ((XSLTLiaison3) liaison).setStylesheet(stylesheet); | |||
| } else { | |||
| // If we are here we cannot set the stylesheet as | |||
| // a resource, but we can set it as a file. So, | |||
| // we make an attempt to get it as a file | |||
| if (stylesheet instanceof FileResource) { | |||
| liaison.setStylesheet( | |||
| ((FileResource) stylesheet).getFile()); | |||
| } else { | |||
| throw new BuildException(liaison.getClass().toString() | |||
| + " accepts the stylesheet only as a file", | |||
| getLocation()); | |||
| } | |||
| } | |||
| for (Enumeration e = params.elements(); e.hasMoreElements();) { | |||
| Param p = (Param) e.nextElement(); | |||
| if (p.shouldUse()) { | |||
| liaison.addParam(p.getName(), p.getExpression()); | |||
| } | |||
| } | |||
| if (liaison instanceof XSLTLiaison2) { | |||
| ((XSLTLiaison2) liaison).configure(this); | |||
| } | |||
| } catch (Exception ex) { | |||
| log("Failed to transform using stylesheet " + stylesheet, | |||
| Project.MSG_INFO); | |||
| @@ -42,11 +42,14 @@ import javax.xml.transform.stream.StreamResult; | |||
| import javax.xml.transform.stream.StreamSource; | |||
| import javax.xml.transform.TransformerConfigurationException; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.taskdefs.XSLTLiaison2; | |||
| import org.apache.tools.ant.taskdefs.XSLTProcess; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.taskdefs.XSLTLiaison3; | |||
| import org.apache.tools.ant.taskdefs.XSLTLogger; | |||
| import org.apache.tools.ant.taskdefs.XSLTLoggerAware; | |||
| import org.apache.tools.ant.taskdefs.XSLTProcess; | |||
| import org.apache.tools.ant.types.XMLCatalog; | |||
| import org.apache.tools.ant.types.Resource; | |||
| import org.apache.tools.ant.types.resources.FileResource; | |||
| import org.apache.tools.ant.util.FileUtils; | |||
| import org.apache.tools.ant.util.JAXPUtils; | |||
| import org.xml.sax.EntityResolver; | |||
| @@ -59,7 +62,12 @@ import org.xml.sax.XMLReader; | |||
| * | |||
| * @since Ant 1.3 | |||
| */ | |||
| public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware { | |||
| public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware { | |||
| /** | |||
| * The current <code>Project</code> | |||
| */ | |||
| private Project project; | |||
| /** | |||
| * the name of the factory implementation class to use | |||
| @@ -71,7 +79,7 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| private TransformerFactory tfactory = null; | |||
| /** stylesheet to use for transformation */ | |||
| private File stylesheet; | |||
| private Resource stylesheet; | |||
| private XSLTLogger logger; | |||
| @@ -115,13 +123,24 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| * @throws Exception on error | |||
| */ | |||
| public void setStylesheet(File stylesheet) throws Exception { | |||
| FileResource fr = new FileResource(); | |||
| fr.setProject(project); | |||
| fr.setFile(stylesheet); | |||
| } | |||
| /** | |||
| * Set the stylesheet file. | |||
| * @param stylesheet a {@link org.apache.tools.ant.types.Resource} value | |||
| * @throws Exception on error | |||
| */ | |||
| public void setStylesheet(Resource stylesheet) throws Exception { | |||
| if (this.stylesheet != null) { | |||
| // resetting the stylesheet - reset transformer | |||
| transformer = null; | |||
| // do we need to reset templates as well | |||
| if (!this.stylesheet.equals(stylesheet) | |||
| || (stylesheet.lastModified() != templatesModTime)) { | |||
| || (stylesheet.getLastModified() != templatesModTime)) { | |||
| templates = null; | |||
| } | |||
| } | |||
| @@ -205,6 +224,35 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| return src; | |||
| } | |||
| private Source getSource(InputStream is, Resource resource) | |||
| throws ParserConfigurationException, SAXException { | |||
| // todo: is this comment still relevant ?? | |||
| // FIXME: need to use a SAXSource as the source for the transform | |||
| // so we can plug in our own entity resolver | |||
| Source src = null; | |||
| if (entityResolver != null) { | |||
| if (getFactory().getFeature(SAXSource.FEATURE)) { | |||
| SAXParserFactory spFactory = SAXParserFactory.newInstance(); | |||
| spFactory.setNamespaceAware(true); | |||
| XMLReader reader = spFactory.newSAXParser().getXMLReader(); | |||
| reader.setEntityResolver(entityResolver); | |||
| src = new SAXSource(reader, new InputSource(is)); | |||
| } else { | |||
| throw new IllegalStateException("xcatalog specified, but " | |||
| + "parser doesn't support SAX"); | |||
| } | |||
| } else { | |||
| // WARN: Don't use the StreamSource(File) ctor. It won't work with | |||
| // xalan prior to 2.2 because of systemid bugs. | |||
| src = new StreamSource(is); | |||
| } | |||
| // The line below is a hack: the system id must an URI, but it is not | |||
| // cleat to get the URI of an resource, so just set the name of the | |||
| // resource as a system id | |||
| src.setSystemId(resource.getName()); | |||
| return src; | |||
| } | |||
| /** | |||
| * Read in templates from the stylesheet | |||
| */ | |||
| @@ -219,8 +267,8 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| InputStream xslStream = null; | |||
| try { | |||
| xslStream | |||
| = new BufferedInputStream(new FileInputStream(stylesheet)); | |||
| templatesModTime = stylesheet.lastModified(); | |||
| = new BufferedInputStream(stylesheet.getInputStream()); | |||
| templatesModTime = stylesheet.getLastModified(); | |||
| Source src = getSource(xslStream, stylesheet); | |||
| templates = getFactory().newTemplates(src); | |||
| } finally { | |||
| @@ -437,7 +485,7 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| /** | |||
| * @param file the filename to use for the systemid | |||
| * @return the systemid | |||
| * @deprecated since 1.5.x. | |||
| * @deprecated since 1.5.x. | |||
| * Use org.apache.tools.ant.util.JAXPUtils#getSystemId instead. | |||
| */ | |||
| protected String getSystemId(File file) { | |||
| @@ -451,6 +499,7 @@ public class TraXLiaison implements XSLTLiaison2, ErrorListener, XSLTLoggerAware | |||
| * is to be configured. | |||
| */ | |||
| public void configure(XSLTProcess xsltTask) { | |||
| project = xsltTask.getProject(); | |||
| XSLTProcess.Factory factory = xsltTask.getFactory(); | |||
| if (factory != null) { | |||
| setFactory(factory.getName()); | |||
| @@ -33,6 +33,8 @@ import org.apache.tools.ant.util.FileUtils; | |||
| */ | |||
| public class StyleTest extends BuildFileTest { | |||
| private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||
| public StyleTest(String s) { | |||
| super(s); | |||
| } | |||
| @@ -48,7 +50,10 @@ public class StyleTest extends BuildFileTest { | |||
| } | |||
| public void testStyleIsSet() throws Exception { | |||
| expectBuildException("testStyleIsSet", "no stylesheet specified"); | |||
| expectSpecificBuildException("testStyleIsSet", | |||
| "no stylesheet specified", "specify the " + | |||
| "stylesheet either as a filename in style " + | |||
| "attribute or as a nested resource"); | |||
| } | |||
| public void testTransferParameterSet() throws Exception { | |||
| @@ -91,21 +96,24 @@ public class StyleTest extends BuildFileTest { | |||
| } | |||
| public void testDefaultMapper(String target) throws Exception { | |||
| assertTrue(!getProject().resolveFile("out/data.html").exists()); | |||
| assertTrue(!(FileUtils.getFileUtils().resolveFile( | |||
| getProject().getBaseDir(),"out/data.html")).exists()); | |||
| expectFileContains(target, | |||
| "out/data.html", | |||
| "set='myvalue'"); | |||
| } | |||
| public void testCustomMapper() throws Exception { | |||
| assertTrue(!getProject().resolveFile("out/out.xml").exists()); | |||
| assertTrue(!FILE_UTILS.resolveFile( | |||
| getProject().getBaseDir(), "out/out.xml").exists()); | |||
| expectFileContains("testCustomMapper", | |||
| "out/out.xml", | |||
| "set='myvalue'"); | |||
| } | |||
| public void testTypedMapper() throws Exception { | |||
| assertTrue(!getProject().resolveFile("out/out.xml").exists()); | |||
| assertTrue(!FILE_UTILS.resolveFile( | |||
| getProject().getBaseDir(), "out/out.xml").exists()); | |||
| expectFileContains("testTypedMapper", | |||
| "out/out.xml", | |||
| "set='myvalue'"); | |||
| @@ -113,16 +121,34 @@ public class StyleTest extends BuildFileTest { | |||
| public void testDirectoryHierarchyWithDirMatching() throws Exception { | |||
| executeTarget("testDirectoryHierarchyWithDirMatching"); | |||
| assertTrue(getProject().resolveFile("out/dest/level1/data.html") | |||
| assertTrue(FILE_UTILS.resolveFile( | |||
| getProject().getBaseDir(), "out/dest/level1/data.html") | |||
| .exists()); | |||
| } | |||
| public void testDirsWithSpaces() throws Exception { | |||
| executeTarget("testDirsWithSpaces"); | |||
| assertTrue(getProject().resolveFile("out/d est/data.html") | |||
| assertTrue(FILE_UTILS.resolveFile( | |||
| getProject().getBaseDir(), "out/d est/data.html") | |||
| .exists()); | |||
| } | |||
| public void testWithStyleAttrAndResource() throws Exception { | |||
| expectSpecificBuildException("testWithStyleAttrAndResource", | |||
| "Must throws a BuildException", "specify the " + | |||
| "stylesheet either as a filename in style " + | |||
| "attribute or as a nested resource but not " + | |||
| "as both"); | |||
| } | |||
| public void testWithFileResource() throws Exception { | |||
| expectFileContains("testWithFileResource", "out/out.xml", "set='value'"); | |||
| } | |||
| public void testWithUrlResource() throws Exception { | |||
| expectFileContains("testWithUrlResource", "out/out.xml", "set='value'"); | |||
| } | |||
| // ************* copied from ConcatTest ************* | |||
| // ------------------------------------------------------ | |||