}
super.recycle();
}
public void generate() throws ProcessingException {
SAXParser parser = null;
try {
// Figure out what file to open and do so
getLogger().debug("processing file [" + super.source + "]");
this.inputSource = this.resolver.resolveURI(super.source);
getLogger().debug("file resolved to [" + this.inputSource.getURI() + "]");
Reader in = new InputStreamReader(this.inputSource.getInputStream());
// Set up the BSF manager and register relevant helper "beans"
BSFManager mgr = new BSFManager();
// add BSF support for additional languages
if (this.additionalLanguages != null) {
for (int i = 0; i < this.additionalLanguages.length; ++i) {
getLogger().debug("adding BSF language " + this.additionalLanguages[i].name +
" with engine " + this.additionalLanguages[i].engineSrc);
BSFManager.registerScriptingEngine(this.additionalLanguages[i].name,
this.additionalLanguages[i].engineSrc,
this.additionalLanguages[i].extensions);
}
}
StringBuffer output = new StringBuffer();
// make useful objects available to scripts
mgr.registerBean("resolver", this.resolver);
mgr.registerBean("source", super.source);
mgr.registerBean("objectModel", this.objectModel);
mgr.registerBean("parameters", this.parameters);
mgr.registerBean("logger", getLogger());
// provide both a StringBuffer and ContentHandler to script,
// so that it can provide XML either as a String or as SAX events
mgr.registerBean("output", output);
mgr.registerBean("contentHandler",contentHandler);
// Execute the script
if(getLogger().isDebugEnabled()) {
getLogger().debug("BSFManager execution begining (" + inputSource.getURI() + ")");
}
mgr.exec(BSFManager.getLangFromFilename(this.inputSource.getURI()),
this.inputSource.getURI(), 0, 0, IOUtils.getStringFromReader(in));
if(getLogger().isDebugEnabled()) {
getLogger().debug("BSFManager execution complete");
}
// If script wrote something to output buffer, use it
if(output.length() > 0) {
if(getLogger().isDebugEnabled()) {
getLogger().debug("Using String output provided by script (" + output.toString() + ")");
}
InputSource xmlInput = new InputSource(new StringReader(output.toString()));
parser = (SAXParser)(this.manager.lookup(SAXParser.ROLE));
parser.parse(xmlInput, this.xmlConsumer);
} else {
if(getLogger().isDebugEnabled()) {
getLogger().debug("Script provided no String output, content should have been written to contentHandler");
}
}