Project

Profile

Help

Support #3237 » Program.java

Aniruddha Joag, 2017-06-01 16:53

 
package test.saxon.streaming.transformerhandler;

import com.saxonica.config.EnterpriseConfiguration;
import com.saxonica.config.StreamingTransformerFactory;

import javax.xml.transform.*;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.StringReader;

public class Program
{

private static final String strXslt =
"<xsl:stylesheet version=\"3.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" >\n" +
" <xsl:output method=\"xml\" version=\"1.0\" encoding=\"UTF-8\" indent=\"yes\"/>\n" +
" <xsl:mode streamable=\"yes\" on-no-match=\"shallow-skip\"/>\n" +
" <xsl:mode name=\"row\" streamable=\"no\"/>\n" +
"\n" +
" <xsl:template match=\"/\">\n" +
" <rows>\n" +
" <xsl:apply-templates select=\"copy-of(rows/row)\" mode=\"row\"/>\n" +
" </rows>\n" +
" </xsl:template>\n" +
"\n" +
" <xsl:template match=\"row\" mode=\"row\">\n" +
" <row>\n" +
" <x-name><xsl:value-of select=\"name\"/></x-name>\n" +
" <x-id><xsl:value-of select=\"id\"/></x-id>\n" +
" </row>\n" +
" </xsl:template>\n" +
"\n" +
"</xsl:stylesheet>";

//private static final int NUM_ROWS = 1;
private static final String RESULT_FILE = "C://swdtools/delete_later/forwarding.xml";

private static final int NUM_ROWS = 1000;
public static void main(String[] args) throws TransformerException, FileNotFoundException
{
//straightTransform();
forwardingHandlerTransform();
}

private static void straightTransform() throws TransformerException
{
SAXSource saxSource = new SAXSource(new RowXMLReader(NUM_ROWS), null);
Result result = new StreamResult(System.out);
getTransformer(strXslt).transform(saxSource, result);
}

private static Transformer mainTransformer;
private static SAXSource saxSource;
private static SAXResult transformedResultForwarder;
private static void forwardingHandlerTransform() throws TransformerException, FileNotFoundException
{
final String newXslt = strXslt.replace("x-", "y-").replace("\"name\"", "\"x-name\"").replace("\"id\"", "\"x-id\"");
final Transformer transformer = getTransformer(newXslt);

//Result result = new StreamResult(System.out);
StreamResult streamResult = new StreamResult(new NonCloseFileOutputStream(new File(RESULT_FILE)));
Runnable runPrimaryTransform = new Runnable()
{
@Override
public void run()
{
try
{
mainTransformer.transform(saxSource, transformedResultForwarder);
} catch (TransformerException e)
{
throw new RuntimeException(e);
}
}
};
ContentHandlerForwarder contentHandlerForwarder = new ContentHandlerForwarder(transformer, streamResult, runPrimaryTransform);
transformedResultForwarder = new SAXResult(contentHandlerForwarder);
saxSource = new SAXSource(new RowXMLReader(NUM_ROWS), null);
mainTransformer = getTransformer(strXslt);
contentHandlerForwarder.initiateTransformAssignReceivingContentHandler();
}


private static Transformer getTransformer(String stringXslt) throws TransformerConfigurationException
{
final StreamingTransformerFactory transformerFactory = new StreamingTransformerFactory(new EnterpriseConfiguration());
return transformerFactory.newTransformer(new StreamSource(new StringReader(stringXslt)));
}
}
(9-9/15)