From 243fdf7dda7ef80bfd940b9d8a0e0c0eea94e128 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Tue, 28 Nov 2023 14:50:18 +0100 Subject: [PATCH] improved XML transformation logging (#428) Co-authored-by: Georgy Litvinov --- .../operations/XMLTransformation.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/dynapi/components/operations/XMLTransformation.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/dynapi/components/operations/XMLTransformation.java index 9ed7fa288c..32f4315ecc 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/dynapi/components/operations/XMLTransformation.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/dynapi/components/operations/XMLTransformation.java @@ -6,21 +6,18 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.ErrorListener; import javax.xml.transform.Source; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; -import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; - import edu.cornell.mannlib.vitro.webapp.dynapi.components.OperationResult; import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameter; import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data; @@ -28,12 +25,16 @@ import edu.cornell.mannlib.vitro.webapp.dynapi.data.ModelView; import edu.cornell.mannlib.vitro.webapp.dynapi.data.SimpleDataView; import edu.cornell.mannlib.vitro.webapp.dynapi.data.conversion.InitializationException; -import edu.cornell.mannlib.vitro.webapp.dynapi.data.implementation.DynapiInMemoryOntModel; import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.w3c.dom.Document; public class XMLTransformation extends AbstractOperation { private static final Log log = LogFactory.getLog(XMLTransformation.class); + private static final ErrorListener errorListener = createXMLErrorListener(); private Parameter xsltParam; private Parameter inputXmlParam; private Parameter outputXmlParam; @@ -96,6 +97,7 @@ private void prepareTransformTemplates() throws InitializationException{ InputStream styleInputStream = IOUtils.toInputStream(defaultValue, StandardCharsets.UTF_8); Source stylesource = new StreamSource(styleInputStream); TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null); + transformerFactory.setErrorListener(errorListener); transformTemplates = transformerFactory.newTemplates(stylesource); } } @@ -112,6 +114,7 @@ private Transformer getTransformer(String styles) InputStream styleInputStream = IOUtils.toInputStream(styles, StandardCharsets.UTF_8); Source stylesource = new StreamSource(styleInputStream); TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null); + transformerFactory.setErrorListener(errorListener); Transformer transformer = transformerFactory.newTransformer(stylesource); if (transformer == null) { throw new Exception("Failed to initialize transformer. Check styles."); @@ -154,4 +157,23 @@ public boolean isValid() { return result; } + + private static ErrorListener createXMLErrorListener() { + return new ErrorListener() { + @Override + public void warning(TransformerException e) throws TransformerException { + log.warn(e, e); + } + + @Override + public void error(TransformerException e) throws TransformerException { + log.error(e, e); + } + + @Override + public void fatalError(TransformerException e) throws TransformerException { + log.error(e, e); + } + }; + } }