|
|
@@ -176,6 +176,20 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
*/ |
|
|
|
private boolean suppressWarnings = false; |
|
|
|
|
|
|
|
/** |
|
|
|
* whether to fail the build if an error occurs during transformation. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
private boolean failOnTransformationError = true; |
|
|
|
|
|
|
|
/** |
|
|
|
* whether to fail the build if an error occurs. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
private boolean failOnError = true; |
|
|
|
|
|
|
|
/** |
|
|
|
* Creates a new XSLTProcess Task. |
|
|
|
*/ |
|
|
@@ -213,9 +227,10 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
*/ |
|
|
|
public void addMapper(Mapper mapper) { |
|
|
|
if (mapperElement != null) { |
|
|
|
throw new BuildException("Cannot define more than one mapper", getLocation()); |
|
|
|
handleError("Cannot define more than one mapper"); |
|
|
|
} else { |
|
|
|
mapperElement = mapper; |
|
|
|
} |
|
|
|
mapperElement = mapper; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -236,10 +251,11 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
*/ |
|
|
|
public void addConfiguredStyle(Resources rc) { |
|
|
|
if (rc.size() != 1) { |
|
|
|
throw new BuildException( |
|
|
|
"The style element must be specified with exactly one nested resource."); |
|
|
|
handleError("The style element must be specified with exactly one" |
|
|
|
+ " nested resource."); |
|
|
|
} else { |
|
|
|
setXslResource((Resource) rc.iterator().next()); |
|
|
|
} |
|
|
|
setXslResource((Resource) rc.iterator().next()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -285,13 +301,16 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
+ "or as a nested resource"; |
|
|
|
|
|
|
|
if (xslResource == null && xslFile == null) { |
|
|
|
throw new BuildException(baseMessage, getLocation()); |
|
|
|
handleError(baseMessage); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (xslResource != null && xslFile != null) { |
|
|
|
throw new BuildException(baseMessage + " but not as both", getLocation()); |
|
|
|
handleError(baseMessage + " but not as both"); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (inFile != null && !inFile.exists()) { |
|
|
|
throw new BuildException("input file " + inFile + " does not exist", getLocation()); |
|
|
|
handleError("input file " + inFile + " does not exist"); |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
Resource styleResource; |
|
|
@@ -331,8 +350,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
} |
|
|
|
|
|
|
|
if (!styleResource.isExists()) { |
|
|
|
throw new BuildException("stylesheet " + styleResource |
|
|
|
+ " doesn't exist."); |
|
|
|
handleError("stylesheet " + styleResource + " doesn't exist."); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// if we have an in file and out then process them |
|
|
@@ -370,7 +389,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
} |
|
|
|
} else { // only resource collections, there better be some |
|
|
|
if (resources.size() == 0) { |
|
|
|
throw new BuildException("no resources specified"); |
|
|
|
handleError("no resources specified"); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
processResources(styleResource); |
|
|
@@ -538,6 +558,24 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
return suppressWarnings; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Whether transformation errors should make the build fail. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
public void setFailOnTransformationError(boolean b) { |
|
|
|
failOnTransformationError = b; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Whether any errors should make the build fail. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
public void setFailOnError(boolean b) { |
|
|
|
failOnError = b; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Load processor here instead of in setProcessor - this will be |
|
|
|
* called from within execute, so we have access to the latest |
|
|
@@ -603,8 +641,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
*/ |
|
|
|
private void checkDest() { |
|
|
|
if (destDir == null) { |
|
|
|
String msg = "destdir attributes must be set!"; |
|
|
|
throw new BuildException(msg); |
|
|
|
handleError("destdir attributes must be set!"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -691,8 +728,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
if (outF != null) { |
|
|
|
outF.delete(); |
|
|
|
} |
|
|
|
|
|
|
|
throw new BuildException(ex); |
|
|
|
handleTransformationError(ex); |
|
|
|
} |
|
|
|
|
|
|
|
} //-- processXML |
|
|
@@ -727,7 +763,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
if (outFile != null) { |
|
|
|
outFile.delete(); |
|
|
|
} |
|
|
|
throw new BuildException(ex); |
|
|
|
handleTransformationError(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -741,8 +777,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
File directory = targetFile.getParentFile(); |
|
|
|
if (!directory.exists()) { |
|
|
|
if (!directory.mkdirs()) { |
|
|
|
throw new BuildException("Unable to create directory: " |
|
|
|
+ directory.getAbsolutePath()); |
|
|
|
handleError("Unable to create directory: " |
|
|
|
+ directory.getAbsolutePath()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -787,14 +823,14 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
try { |
|
|
|
resolveProcessor(processor); |
|
|
|
} catch (Exception e) { |
|
|
|
throw new BuildException(e); |
|
|
|
handleError(e); |
|
|
|
} |
|
|
|
} else { |
|
|
|
try { |
|
|
|
resolveProcessor(PROCESSOR_TRAX); |
|
|
|
} catch (Throwable e1) { |
|
|
|
e1.printStackTrace(); |
|
|
|
throw new BuildException(e1); |
|
|
|
handleError(e1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -1026,8 +1062,9 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
if (fp != null) { |
|
|
|
liaison.setStylesheet(fp.getFile()); |
|
|
|
} else { |
|
|
|
throw new BuildException(liaison.getClass().toString() |
|
|
|
+ " accepts the stylesheet only as a file", getLocation()); |
|
|
|
handleError(liaison.getClass().toString() |
|
|
|
+ " accepts the stylesheet only as a file"); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
for (Enumeration e = params.elements(); e.hasMoreElements();) { |
|
|
@@ -1038,7 +1075,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
} |
|
|
|
} catch (Exception ex) { |
|
|
|
log("Failed to transform using stylesheet " + stylesheet, Project.MSG_INFO); |
|
|
|
throw new BuildException(ex); |
|
|
|
handleTransformationError(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -1074,12 +1111,58 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { |
|
|
|
*/ |
|
|
|
public Factory createFactory() throws BuildException { |
|
|
|
if (factory != null) { |
|
|
|
throw new BuildException("'factory' element must be unique"); |
|
|
|
handleError("'factory' element must be unique"); |
|
|
|
} else { |
|
|
|
factory = new Factory(); |
|
|
|
} |
|
|
|
factory = new Factory(); |
|
|
|
return factory; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Throws an exception with the given message if failOnError is |
|
|
|
* true, otherwise logs the message using the WARN level. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
protected void handleError(String msg) { |
|
|
|
if (failOnError) { |
|
|
|
throw new BuildException(msg, getLocation()); |
|
|
|
} |
|
|
|
log(msg, Project.MSG_WARN); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Throws an exception with the given nested exception if |
|
|
|
* failOnError is true, otherwise logs the message using the WARN |
|
|
|
* level. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
protected void handleError(Throwable ex) { |
|
|
|
if (failOnError) { |
|
|
|
throw new BuildException(ex); |
|
|
|
} else { |
|
|
|
log("Caught an exception: " + ex, Project.MSG_WARN); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Throws an exception with the given nested exception if |
|
|
|
* failOnError and failOnTransformationError are true, otherwise |
|
|
|
* logs the message using the WARN level. |
|
|
|
* |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
protected void handleTransformationError(Exception ex) { |
|
|
|
if (failOnError && failOnTransformationError) { |
|
|
|
throw new BuildException(ex); |
|
|
|
} else { |
|
|
|
log("Caught an error during transformation: " + ex, |
|
|
|
Project.MSG_WARN); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* The factory element to configure a transformer factory |
|
|
|
* @since Ant 1.6 |
|
|
|