From 57728ca735f2ca61d2e9e5498ef9cb659493ac42 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 24 May 2023 08:54:50 +0200 Subject: [PATCH] Use Saxon instead of Xalan --- .../org/argeo/app/servlet/publish/DbkServlet.java | 6 ++++-- .../org/argeo/app/servlet/publish/FopServlet.java | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/DbkServlet.java b/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/DbkServlet.java index f2d38e1..152df6e 100644 --- a/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/DbkServlet.java +++ b/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/DbkServlet.java @@ -42,7 +42,6 @@ import javax.xml.transform.stream.StreamSource; import org.apache.commons.io.IOUtils; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; -import org.apache.xalan.processor.TransformerFactoryImpl; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.ux.CmsTheme; import org.argeo.app.docbook.DbkType; @@ -54,6 +53,8 @@ import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; import org.w3c.dom.Document; +import net.sf.saxon.BasicTransformerFactory; + /** * A servlet transforming a dbk:* JCR node into HTML, using the DocBook XSL. */ @@ -256,9 +257,10 @@ public class DbkServlet extends HttpServlet { protected Templates createDocBookTemplates(String xsl) { try { if (transformerFactory == null) { + transformerFactory = new BasicTransformerFactory(); // We must explicitly use the non-XSLTC transformer, as XSLTC is not working // with DocBook stylesheets - transformerFactory = new TransformerFactoryImpl(); +// transformerFactory = new TransformerFactoryImpl(); } Source xslSource = new StreamSource(xsl); Templates templates = transformerFactory.newTemplates(xslSource); diff --git a/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/FopServlet.java b/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/FopServlet.java index 1ee19f0..b0c2f63 100644 --- a/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/FopServlet.java +++ b/org.argeo.app.servlet.publish/src/org/argeo/app/servlet/publish/FopServlet.java @@ -35,7 +35,6 @@ import org.apache.fop.apps.FOPException; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.FopFactoryBuilder; -import org.apache.xalan.processor.TransformerFactoryImpl; import org.apache.xmlgraphics.io.Resource; import org.apache.xmlgraphics.io.ResourceResolver; import org.argeo.api.acr.Content; @@ -51,6 +50,8 @@ import org.geotools.data.collection.ListFeatureCollection; import org.geotools.data.simple.SimpleFeatureCollection; import org.opengis.feature.simple.SimpleFeature; +import net.sf.saxon.BasicTransformerFactory; + /** * A servlet transforming an XML view of the data to either FOP or PDF. */ @@ -80,7 +81,7 @@ public class FopServlet extends HttpServlet { Content content = session.get(path); // dev only - final boolean DEV = false; + final boolean DEV = true; if (DEV) { try (InputStream in = xslUrl.openStream()) { Source xslSource = new StreamSource(in); @@ -92,7 +93,7 @@ public class FopServlet extends HttpServlet { } Source xmlInput = content.adapt(Source.class); - XmlNormalizer.print(xmlInput,0); + XmlNormalizer.print(xmlInput, 0); } Source xmlInput = content.adapt(Source.class); @@ -131,6 +132,7 @@ public class FopServlet extends HttpServlet { } String p = href.startsWith("/") ? href : path + '/' + href; + p = URLDecoder.decode(p, StandardCharsets.UTF_8); Content subContent = session.get(p); return subContent.adapt(Source.class); }; @@ -191,9 +193,7 @@ public class FopServlet extends HttpServlet { documentBuilderFactory.setXIncludeAware(true); documentBuilderFactory.setNamespaceAware(true); - // We must explicitly use the non-XSLTC transformer, as XSLTC is not working - // with DocBook stylesheets - transformerFactory = new TransformerFactoryImpl(); + transformerFactory = new BasicTransformerFactory(); // transformerFactory = TransformerFactory.newDefaultInstance(); try { String xslStr = LangUtils.get(properties, PROP_ARGEO_FO_XSL); -- 2.30.2