Browse Source

add support for TraX factory features

master
Stefan Bodewig 9 years ago
parent
commit
cac55fbfc0
4 changed files with 134 additions and 8 deletions
  1. +3
    -0
      WHATSNEW
  2. +30
    -1
      manual/Tasks/style.html
  3. +69
    -4
      src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
  4. +32
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java

+ 3
- 0
WHATSNEW View File

@@ -83,6 +83,9 @@ Other changes:
nativeheaderdir attribute.
Bugzilla Report 59905

* it is now possible to set features of the TraX factory used by <xslt>
and <junitreport>.

Changes from Ant 1.9.6 TO Ant 1.9.7
===================================



+ 30
- 1
manual/Tasks/style.html View File

@@ -395,7 +395,7 @@ Used to specify factory settings.
</tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>attribute </h4>
<h4>attribute</h4>
<p>Used to specify settings of the processor factory.
The attribute names and values are entirely processor specific
so you must be aware of the implementation to figure them out.
@@ -435,6 +435,35 @@ And in Saxon 7.x:
</tr>
</table>
</blockquote>
<h4>feature</h4>
<p><em>since Ant 1.9.8</em></p>
<p>Used to specify settings of the processor factory. The feature
names are mostly processor specific so you must be aware of the
implementation to figure them out. Read the documentation of your
processor. The only feature all implementations are required to
support
is <code>http://javax.xml.XMLConstants/feature/secure-processing</code>.
<blockquote>
<h4>Parameters</h4>
<table width="60%" border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">name</td>
<td valign="top">Name of the feature</td>
<td align="center" valign="top">Yes</td>
</tr>
<tr>
<td valign="top">value</td>
<td valign="top">value of the feature. A boolean value
(i.e. permitted values are true,false,yes,no,on,off).</td>
<td align="center" valign="top">No, defaults to false</td>
</tr>
</table>
</blockquote>
</blockquote>
<h4>mapper</h4>



+ 69
- 4
src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java View File

@@ -1462,7 +1462,12 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
/**
* the list of factory attributes to use for TraXLiaison
*/
private final Vector attributes = new Vector();
private final List<Attribute> attributes = new ArrayList<Attribute>();

/**
* the list of factory features to use for TraXLiaison
*/
private final List<Feature> features = new ArrayList<Feature>();

/**
* @return the name of the factory.
@@ -1484,7 +1489,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
* @param attr the newly created factory attribute
*/
public void addAttribute(final Attribute attr) {
attributes.addElement(attr);
attributes.add(attr);
}

/**
@@ -1492,7 +1497,24 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
* @return the enumeration of attributes
*/
public Enumeration getAttributes() {
return attributes.elements();
return Collections.enumeration(attributes);
}

/**
* Create an instance of a factory feature.
* @param feature the newly created feature
* @since Ant 1.9.8
*/
public void addFeature(final Feature feature) {
features.add(feature);
}

/**
* The configured features.
* @since Ant 1.9.8
*/
public Iterable<Feature> getFeatures() {
return features;
}

/**
@@ -1519,7 +1541,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
}

/**
* @return the output property value.
* @return the attribute value.
*/
public Object getValue() {
return value;
@@ -1565,6 +1587,49 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger {
}
}
} // -- class Attribute

/**
* A feature for the TraX factory.
* @since Ant 1.9.8
*/
public static class Feature {
private String name;
private boolean value;

public Feature() { }
public Feature(String name, boolean value) {
this.name = name;
this.value = value;
}

/**
* @param name the feature name.
*/
public void setName(String name) {
this.name = name;
}

/**
* @param value the feature value.
*/
public void setValue(boolean value) {
this.value = value;
}

/**
* @return the feature name.
*/
public String getName() {
return name;
}

/**
* @return the feature value.
*/
public boolean getValue() {
return value;
}
}
} // -- class Factory

/**


+ 32
- 3
src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java View File

@@ -28,8 +28,12 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import javax.xml.parsers.ParserConfigurationException;
@@ -123,7 +127,10 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
private final Hashtable<String, Object> params = new Hashtable<String, Object>();

/** factory attributes */
private final Vector attributes = new Vector();
private final List<Object[]> attributes = new ArrayList<Object[]>();

/** factory features */
private final Map<String, Boolean> features = new HashMap<String, Boolean>();

/** whether to suppress warnings */
private boolean suppressWarnings = false;
@@ -436,10 +443,18 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
// specific attributes for the transformer
final int size = attributes.size();
for (int i = 0; i < size; i++) {
final Object[] pair = (Object[]) attributes.elementAt(i);
final Object[] pair = attributes.get(i);
tfactory.setAttribute((String) pair[0], pair[1]);
}

for (Map.Entry<String, Boolean> feature : features.entrySet()) {
try {
tfactory.setFeature(feature.getKey(), feature.getValue());
} catch (TransformerConfigurationException ex) {
throw new BuildException(ex);
}
}

if (uriResolver != null) {
tfactory.setURIResolver(uriResolver);
}
@@ -466,7 +481,17 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
*/
public void setAttribute(final String name, final Object value) {
final Object[] pair = new Object[]{name, value};
attributes.addElement(pair);
attributes.add(pair);
}

/**
* Set a custom feature for the JAXP factory implementation.
* @param name the feature name.
* @param value the value of the feature
* @since Ant 1.9.8
*/
public void setFeature(final String name, final boolean value) {
features.put(name, value);
}

/**
@@ -625,6 +650,10 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware
(XSLTProcess.Factory.Attribute) attrs.nextElement();
setAttribute(attr.getName(), attr.getValue());
}
for (final XSLTProcess.Factory.Feature feature
: factory.getFeatures()) {
setFeature(feature.getName(), feature.getValue());
}
}

final XMLCatalog xmlCatalog = xsltTask.getXMLCatalog();


Loading…
Cancel
Save