--- /dev/null
+package org.argeo.publishing.servlet;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.xalan.xsltc.trax.SmartTransformerFactoryImpl;
+import org.argeo.cms.servlet.ServletAuthUtils;
+import org.argeo.jcr.Jcr;
+import org.argeo.jcr.JcrException;
+import org.w3c.dom.Document;
+
+public class DbkServlet extends HttpServlet {
+ private static final long serialVersionUID = 6906020513498289335L;
+
+ private Repository repository;
+
+ private DocumentBuilderFactory factory;
+ private TransformerFactory transformerFactory;
+ private Templates docBoookTemplates;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ resp.setContentType("text/html; charset=utf-8");
+
+ Session session = null;
+ try {
+ session = ServletAuthUtils.doAs(() -> Jcr.login(repository, null), req);
+
+ String pathInfo = req.getPathInfo();
+ if (pathInfo.startsWith("//"))
+ pathInfo = pathInfo.substring(1);
+ String path = URLDecoder.decode(pathInfo, StandardCharsets.UTF_8);
+
+ byte[] arr;
+ try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ session.exportDocumentView(path, out, true, false);
+ arr = out.toByteArray();
+ System.out.println(new String(arr, StandardCharsets.UTF_8));
+ } catch (RepositoryException e) {
+ throw new JcrException(e);
+ }
+
+ try (InputStream in = new ByteArrayInputStream(arr);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();) {
+// Source xsl = new StreamSource(new File("/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl"));
+// Source xsl = new StreamSource(
+// Files.newBufferedReader(Paths.get("/home/mbaudier/Downloads/docbook-xsl-1.79.2/xhtml/docbook.xsl"),
+// StandardCharsets.US_ASCII),
+// "file:///home/mbaudier/Downloads/docbook-xsl-1.79.2/xhtml/docbook.xsl");
+ Source xsl = new StreamSource(
+ new File(System.getProperty("user.home") + "/Downloads/docbook-xsl-1.79.2/html/docbook.xsl"));
+// if (docBoookTemplates == null) {
+// try {
+// docBoookTemplates = transformerFactory.newTemplates(xsl);
+// } catch (TransformerConfigurationException e) {
+// throw new ServletException("Cannot instantiate XSL " + xsl, e);
+// }
+// }
+
+// Source xmlInput = new StreamSource(new File("/home/mbaudier/dev/git/gpl/argeo-qa/doc/platform/argeo-platform.dbk.xml"));
+// Source xmlInput = new StreamSource(in);
+ Result xmlOutput = new StreamResult(out);
+
+// DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+//// DocumentBuilderFactory factory = new org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
+// factory.setXIncludeAware(true);
+// factory.setNamespaceAware(true);
+ DocumentBuilder docBuilder = factory.newDocumentBuilder();
+// Document doc = docBuilder
+// .parse(new File("/home/mbaudier/dev/git/gpl/argeo-qa/doc/platform/argeo-platform.dbk.xml"));
+ Document doc = docBuilder.parse(in);
+ Source xmlInput = new DOMSource(doc);
+
+// SAXParserFactory factory = SAXParserFactory.newInstance();
+// SAXParser saxParser = factory.newSAXParser();
+// Source xmlInput = new SAXSource(saxParser.getXMLReader(),
+// new InputSource(new FileReader(new File("/home/mbaudier/dev/git/gpl/argeo-qa/doc/platform/argeo-platform.dbk.xml"),StandardCharsets.UTF_8)));
+
+// Source xmlInput = new StreamSource(
+// new File("/home/mbaudier/dev/workspaces/argeo-suite/xslt-test/input.xml"));
+// Result xmlOutput = new StreamResult(new File("output.html"));
+
+// TransformerFactory transformerFactory = new org.apache.xalan.processor.TransformerFactoryImpl();
+ Transformer transformer = transformerFactory.newTransformer(xsl);
+ transformer.transform(xmlInput, xmlOutput);
+ resp.getOutputStream().write(out.toByteArray());
+ } catch (Exception e) {
+ throw new ServletException("Cannot transform " + path, e);
+ }
+ } finally {
+ Jcr.logout(session);
+ }
+ }
+
+ @Override
+ public void init() throws ServletException {
+ factory = DocumentBuilderFactory.newInstance();
+ factory.setXIncludeAware(true);
+ factory.setNamespaceAware(true);
+ transformerFactory = new SmartTransformerFactoryImpl();
+ }
+
+ public void setRepository(Repository repository) {
+ this.repository = repository;
+ }
+
+}