/****************************************************************************/ /* File: EXPathConfiguration.java */ /* Author: F. Georges */ /* Company: H2O Consulting */ /* Date: 2009-07-28 */ /* Tags: */ /* Copyright (c) 2009 Florent Georges (see end of file.) */ /* ------------------------------------------------------------------------ */ package scrapbook.catalog; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import net.sf.saxon.Configuration; import net.sf.saxon.TransformerFactoryImpl; import net.sf.saxon.query.DynamicQueryContext; import net.sf.saxon.query.StaticQueryContext; import net.sf.saxon.query.XQueryExpression; import net.sf.saxon.s9api.Processor; import net.sf.saxon.s9api.QName; import net.sf.saxon.s9api.SaxonApiException; import net.sf.saxon.s9api.Serializer; import net.sf.saxon.s9api.XQueryCompiler; import net.sf.saxon.s9api.XQueryEvaluator; import net.sf.saxon.s9api.XQueryExecutable; import net.sf.saxon.s9api.XsltCompiler; import net.sf.saxon.s9api.XsltExecutable; import net.sf.saxon.s9api.XsltTransformer; import net.sf.saxon.trans.XPathException; import org.expath.pkg.repo.FileSystemStorage; import org.expath.pkg.repo.PackageException; import org.expath.pkg.repo.Storage; import org.expath.pkg.saxon.ConfigHelper; import org.expath.pkg.saxon.SaxonRepository; import org.junit.Test; /** * Test the repo configuration of the several Saxon invocation mechanisms. * * @author Florent Georges */ public class ConfigHelperTest { public ConfigHelperTest() throws PackageException { Storage storage = new FileSystemStorage(new File("test/java/transform/repo")); REPO = new SaxonRepository(storage); } // Using S9api Processor. @Test public void xslt_s9api() throws TransformerException , SaxonApiException , PackageException { // the config object Configuration config = new Configuration(); // configure the config object for Packaging System ConfigHelper helper = new ConfigHelper(REPO); helper.config(config); // the processor Processor proc = new Processor(config); // compiling XsltCompiler compiler = proc.newXsltCompiler(); Source style = new StreamSource(getResource(XSLT_NAME)); XsltExecutable exec = compiler.compile(style); // actually evaluate XsltTransformer trans = exec.load(); trans.setInitialTemplate(new QName("main")); Serializer out = new Serializer(OUT); trans.setDestination(out); trans.transform(); } // Using S9api Processor. @Test public void xquery_s9api() throws TransformerException , SaxonApiException , IOException , PackageException { // the config object Configuration config = new Configuration(); // configure the config object for Packaging System ConfigHelper helper = new ConfigHelper(REPO); helper.config(config); // the processor Processor proc = new Processor(config); // compiling XQueryCompiler compiler = proc.newXQueryCompiler(); XQueryExecutable exec = compiler.compile(getResource(XQUERY_NAME)); // actually evaluate XQueryEvaluator eval = exec.load(); Serializer out = new Serializer(OUT); eval.run(out); } // Using JAXP factory. @Test public void xslt_jaxp() throws TransformerException , PackageException { // the factory TransformerFactoryImpl factory = new TransformerFactoryImpl(); // configure the factory for Packaging System ConfigHelper helper = new ConfigHelper(REPO); helper.config(factory.getConfiguration()); // compiling Source style = new StreamSource(getResource(XSLT_NAME)); Templates templates = factory.newTemplates(style); // actually transform Transformer trans = templates.newTransformer(); Source src = new StreamSource(getResource(XSLT_NAME)); Result res = new StreamResult(OUT); trans.transform(src, res); } // Using Saxon Configuration. @Test public void xquery_legacy() throws TransformerException , XPathException , IOException , PackageException { // the config object Configuration config = new Configuration(); // configure the config object for Packaging System ConfigHelper helper = new ConfigHelper(REPO); helper.config(config); // compiling StaticQueryContext ctxt = config.newStaticQueryContext(); XQueryExpression exp = ctxt.compileQuery(getResource(XQUERY_NAME), "utf-8"); // actually evaluate DynamicQueryContext dyn = new DynamicQueryContext(config); Result res = new StreamResult(OUT); exp.run(dyn, res, null); } private InputStream getResource(String resource) { ClassLoader loader = getClass().getClassLoader(); return loader.getResourceAsStream(resource); } private final SaxonRepository REPO; // private static final String XSLT_NAME = "scrapbook/catalog/http-test.xsl"; // private static final String XQUERY_NAME = "scrapbook/catalog/http-test.xq"; private static final String XSLT_NAME = "transform/style.xsl"; private static final String XQUERY_NAME = "transform/query.xq"; // private static final OutputStream OUT = System.err; private static final OutputStream OUT = new DevNull(); private static class DevNull extends OutputStream { @Override public void close() throws IOException { // nothing } @Override public void flush() throws IOException { // nothing } @Override public void write(byte[] b) throws IOException { // nothing } @Override public void write(byte[] b, int off, int len) throws IOException { // nothing } @Override public void write(int b) throws IOException { // nothing } } } /* ------------------------------------------------------------------------ */ /* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS COMMENT. */ /* */ /* The contents of this file are subject to the Mozilla Public License */ /* Version 1.0 (the "License"); you may not use this file except in */ /* compliance with the License. You may obtain a copy of the License at */ /* http://www.mozilla.org/MPL/. */ /* */ /* Software distributed under the License is distributed on an "AS IS" */ /* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */ /* the License for the specific language governing rights and limitations */ /* under the License. */ /* */ /* The Original Code is: all this file. */ /* */ /* The Initial Developer of the Original Code is Florent Georges. */ /* */ /* Contributor(s): none. */ /* ------------------------------------------------------------------------ */