Methods Summary |
---|
public void | addParameter(java.lang.String name, java.lang.Object value)Sets (adds) a transformation parameter on our transformer.
t.setParameter(name, value);
|
public int | doEndTag()
try {
//************************************
// Determine source XML
// if we haven't gotten a source, use the body (which may be empty)
Object xml = this.xml;
if (xml == null) // still equal
if (bodyContent != null && bodyContent.getString() != null)
xml = bodyContent.getString().trim();
else
xml = "";
// let the Source be with you
Source source = getSource(xml, xmlSystemId);
//************************************
// Conduct the transformation
// we can assume at most one of 'var' or 'result' is specified
if (result != null)
// we can write directly to the Result
t.transform(source, result);
else if (var != null) {
// we need a Document
Document d = db.newDocument();
Result doc = new DOMResult(d);
t.transform(source, doc);
pageContext.setAttribute(var, d, scope);
} else {
Result page =
new StreamResult(new SafeWriter(pageContext.getOut()));
t.transform(source, page);
}
return EVAL_PAGE;
} catch (SAXException ex) {
throw new JspException(ex);
} catch (ParserConfigurationException ex) {
throw new JspException(ex);
} catch (IOException ex) {
throw new JspException(ex);
} catch (TransformerException ex) {
throw new JspException(ex);
}
|
public int | doStartTag()
/*
* We can set up our Transformer here, so we do so, and we let
* it receive parameters directly from subtags (instead of
* caching them.
*/
try {
//************************************
// Initialize
// set up our DocumentBuilderFactory if necessary
if (dbf == null) {
dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
}
if (db == null)
db = dbf.newDocumentBuilder();
// set up the TransformerFactory if necessary
if (tf == null)
tf = TransformerFactory.newInstance();
//************************************
// Produce transformer
Source s;
if (xslt != null) {
if (!(xslt instanceof String) && !(xslt instanceof Reader)
&& !(xslt instanceof javax.xml.transform.Source))
throw new JspTagException(
Resources.getMessage("TRANSFORM_XSLT_UNRECOGNIZED"));
s = getSource(xslt, xsltSystemId);
} else {
throw new JspTagException(
Resources.getMessage("TRANSFORM_NO_TRANSFORMER"));
}
tf.setURIResolver(new JstlUriResolver(pageContext));
t = tf.newTransformer(s);
return EVAL_BODY_BUFFERED;
} catch (SAXException ex) {
throw new JspException(ex);
} catch (ParserConfigurationException ex) {
throw new JspException(ex);
} catch (IOException ex) {
throw new JspException(ex);
} catch (TransformerConfigurationException ex) {
throw new JspException(ex);
}
|
private javax.xml.transform.Source | getSource(java.lang.Object o, java.lang.String systemId)Retrieves a Source from the given Object, whether it be a String,
Reader, Node, or other supported types (even a Source already).
If 'url' is true, then we must be passed a String and will interpret
it as a URL. A null input always results in a null output.
if (o == null)
return null;
else if (o instanceof Source) {
return (Source) o;
} else if (o instanceof String) {
// if we've got a string, chain to Reader below
return getSource(new StringReader((String) o), systemId);
} else if (o instanceof Reader) {
// explicitly go through SAX to maintain control
// over how relative external entities resolve
XMLReader xr = XMLReaderFactory.createXMLReader();
xr.setEntityResolver(
new ParseSupport.JstlEntityResolver(pageContext));
InputSource s = new InputSource((Reader) o);
s.setSystemId(wrapSystemId(systemId));
Source result = new SAXSource(xr, s);
result.setSystemId(wrapSystemId(systemId));
return result;
} else if (o instanceof Node) {
return new DOMSource((Node) o);
} else if (o instanceof List) {
// support 1-item List because our XPath processor outputs them
List l = (List) o;
if (l.size() == 1) {
return getSource(l.get(0), systemId); // unwrap List
} else {
throw new IllegalArgumentException(
Resources.getMessage("TRANSFORM_SOURCE_INVALID_LIST"));
}
} else {
throw new IllegalArgumentException(
Resources.getMessage("TRANSFORM_SOURCE_UNRECOGNIZED")
+ o.getClass());
}
|
private void | init()
xml = xslt = null;
xmlSystemId = xsltSystemId = null;
var = null;
result = null;
tf = null;
scope = PageContext.PAGE_SCOPE;
|
public void | release()
init();
|
public void | setScope(java.lang.String scope)
this.scope = Util.getScope(scope);
|
public void | setVar(java.lang.String var)
this.var = var;
|
private static java.lang.String | wrapSystemId(java.lang.String systemId)Wraps systemId with a "jstl:" prefix to prevent the parser from
thinking that the URI is truly relative and resolving it against
the current directory in the filesystem.
if (systemId == null)
return "jstl:";
else if (ImportSupport.isAbsoluteUrl(systemId))
return systemId;
else
return ("jstl:" + systemId);
|