I need a way to interfere in writting xsl result documents to avoid writting them to file system. Right now my template is writting to a temporary directory, and then i zip
Note that recent versions of Saxon require that the href (URI) is unique. Thus the system ID of the stream in the output resolver must also be unique.
For example:
Specify the result document href values in the stylesheet
Create the output resolver
public class ZipOutputURIReslover implements OutputURIResolver{
private ZipOutputStream zipOut;
public ZipOutputURIReslover(ZipOutputStream zipOut) {
super();
this.zipOut = zipOut;
}
public void close(Result arg0) throws TransformerException {
try {
zipOut.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
public Result resolve(String href, String base) throws TransformerException {
try {
zipOut.putNextEntry(new ZipEntry(href));
} catch (IOException e) {
e.printStackTrace();
}
Result result = new StreamResult(zipOut);
// Must ensure the stream is given a unique ID
result.setSystemId(UUID.randomUUID().toString());
return result;
}
}
Attach the output resolver to the transformer
ZipOutputURIResolver outputResolver = new ZipOutputURIResolver(outputStream);
// Controller is the Saxon implementation of the JAXP Transformer
((Controller) transformer).setOutputURIResolver(outputResolver);