// Get a ServerPagesGenerator
ServerPagesGenerator generator = (ServerPagesGenerator)this.generatorHandler.get();
// Generator output, if output-attribute was given
XMLByteStreamCompiler compiler = null;
try {
generator.enableLogging(getLogger());
generator.compose(this.manager);
generator.setup(resolver, objectModel, source, parameters);
// Setup generator output
if (outputKey == null) {
// discard output to a "black hole"
generator.setConsumer(new AbstractXMLConsumer() { } ); // Make the abstract class instanciable
} else {
// store output in a byte stream
compiler = new XMLByteStreamCompiler();
generator.setConsumer(compiler);
}
// Augment the object model for the "action" logicsheet
objectModel.put(REDIRECTOR_OBJECT, redirector);
objectModel.put(ACTION_RESULT_OBJECT, resultMap);
// Let the XSP do it's stuff
generator.generate();
success = objectModel.get(ACTION_SUCCESS_OBJECT);
} finally {
// Release generator
generatorHandler.put(generator);
// Clean up object model
objectModel.remove(REDIRECTOR_OBJECT);
objectModel.remove(ACTION_RESULT_OBJECT);
objectModel.remove(ACTION_SUCCESS_OBJECT);
}
if (outputKey != null) {
// Success defaults to true when the whole output is captured
if (success == null) {
success = Boolean.TRUE;
}
if (success == Boolean.TRUE) {
// Store the XSP output in the request
Request req = ObjectModelHelper.getRequest(objectModel);
req.setAttribute(outputKey, new XMLByteStreamFragment(compiler.getSAXFragment()));
}
}
return (success == Boolean.TRUE) ? resultMap : null;
}