diff --git a/Backend/xslt-rest/pom.xml b/Backend/xslt-rest/pom.xml index db97ca3..4f593b2 100644 --- a/Backend/xslt-rest/pom.xml +++ b/Backend/xslt-rest/pom.xml @@ -14,6 +14,7 @@ UTF-8 2.14.1 2.0.6 + 2.19.0 @@ -77,7 +78,7 @@ com.sparkjava spark-core - 2.9.3 + 2.9.4 @@ -133,8 +134,15 @@ org.apache.logging.log4j log4j-core - 2.19.0 + ${log4j.version} + + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + \ No newline at end of file diff --git a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/SparkInitializer.java b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/SparkInitializer.java index 8464c6f..e17ad41 100644 --- a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/SparkInitializer.java +++ b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/SparkInitializer.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.r11.tools.xslt.processors.Saxon; import com.r11.tools.xslt.processors.Xalan; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import spark.*; import java.util.HashMap; @@ -14,6 +16,9 @@ import java.util.Map; * @author Wojciech Czop */ public class SparkInitializer { + + private static final Logger LOG = LogManager.getLogger(SparkInitializer.class); + /** * Initializes spark framework */ @@ -32,17 +37,19 @@ public class SparkInitializer { Spark.post("/xpathpost", xpathHandler); Spark.post("/xsdpost", xsdHandler); Spark.get("/procinfo", procinfoHandler); - System.out.println("Server is online"); + + LOG.info("Server is online at port: " + Spark.port()); } /** * Handler that returns processor version */ - private static Route procinfoHandler = (Request req, Response resp) -> { + private static final Route procinfoHandler = (Request req, Response resp) -> { try { resp.header("processor", "Saxon " + Saxon.getVersion() + " over s9api"); return Saxon.getVersion(); } catch (Exception ex) { + LOG.error("Error on retrieving engine version. " + ex); return ex.getMessage(); } }; @@ -51,11 +58,10 @@ public class SparkInitializer { * Handler that returns info if document is valid * Also provides info about request time and processor */ - private static Route xsdHandler = (Request req, Response resp) -> { + private static final Route xsdHandler = (Request req, Response resp) -> { String body = req.body(); - System.out.println("Request: " + body); ObjectMapper mapper = new ObjectMapper(); - Map requestMap = null; + Map requestMap = new HashMap<>(); Map responseMap = new HashMap<>(); try { requestMap = mapper.readValue(body, Map.class); @@ -65,8 +71,6 @@ public class SparkInitializer { String data = requestMap.get("data"); String xsd = requestMap.get("process"); - String processor = requestMap.get("processor"); - String version = requestMap.get("version"); resp.header("processor", Xalan.getVersion()); long timeStart = System.currentTimeMillis(); @@ -76,12 +80,13 @@ public class SparkInitializer { responseMap.put("result", tmp); responseMap.put("status", "OK"); } catch (Exception ex) { - System.out.println("Exception: "+ex.getMessage()); + LOG.error("Error on validation against XSD using Xalan. " + ex); responseMap.put("result", ex.getMessage()); responseMap.put("status", "ERR"); resp.status(400); } long duration = System.currentTimeMillis() - timeStart; + LOG.info("Request: " + body + " processed in " + duration + " ms."); responseMap.put("processor", Xalan.getVersion()); responseMap.put("time", "" + duration); resp.body(mapper.writeValueAsString(responseMap)); @@ -91,17 +96,15 @@ public class SparkInitializer { /** * Handler that returns output of xpath query and processor data */ - private static Route xpathHandler = (Request req, Response resp) -> { - + private static final Route xpathHandler = (Request req, Response resp) -> { String body = req.body(); - System.out.println("Request: " + body); ObjectMapper mapper = new ObjectMapper(); - Map requestMap = null; + Map requestMap = new HashMap<>(); Map responseMap = new HashMap<>(); try { requestMap = mapper.readValue(body, Map.class); } catch (JsonMappingException ex) { - ex.printStackTrace(); + LOG.error("JSON mapping error. " + ex); } String data = requestMap.get("data"); @@ -109,6 +112,7 @@ public class SparkInitializer { String processor = requestMap.get("processor"); String version = requestMap.get("version"); + String tmp = ""; long timeStart; long duration; @@ -116,70 +120,66 @@ public class SparkInitializer { if (processor == null) { return "saxon, xalan"; } - try { - switch (processor) { - case "saxon": - resp.header("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); - System.out.print("Processing start..."); - timeStart = System.currentTimeMillis(); - try { - tmp = Saxon.processXPath(data, query, version).trim(); - responseMap.put("result", tmp); - responseMap.put("status", "OK"); - } catch (Exception ex) { - responseMap.put("result", ex.getMessage()); - responseMap.put("status", "ERR"); - resp.status(400); - } - duration = System.currentTimeMillis() - timeStart; - System.out.println("end(" + duration + ")"); - responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); - responseMap.put("time", "" + duration); - resp.body(mapper.writeValueAsString(responseMap)); - return resp; - case "xalan": - resp.header("processor", Xalan.getVersion()); - timeStart = System.currentTimeMillis(); - try { - tmp = Xalan.processXPath(data, query).trim(); - responseMap.put("result", tmp); - responseMap.put("status", "OK"); - } catch (Exception ex) { - responseMap.put("result", ex.getMessage()); - responseMap.put("status", "ERR"); - resp.status(400); - } - duration = System.currentTimeMillis() - timeStart; - responseMap.put("processor", Xalan.getVersion()); + switch (processor) { + case "saxon": + resp.header("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); + timeStart = System.currentTimeMillis(); + try { + tmp = Saxon.processXPath(data, query, version).trim(); responseMap.put("result", tmp); - responseMap.put("time", Long.toString(duration)); - resp.body(mapper.writeValueAsString(responseMap)); - return resp; + responseMap.put("status", "OK"); + } catch (Exception ex) { + LOG.error("Error on processing XPath using Saxon. " + ex); + responseMap.put("result", ex.getMessage()); + responseMap.put("status", "ERR"); + resp.status(400); + } + duration = System.currentTimeMillis() - timeStart; + LOG.info("Request" + body + " processed in " + duration + " ms."); + responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version + " over s9api"); + responseMap.put("time", "" + duration); + resp.body(mapper.writeValueAsString(responseMap)); + return resp; - default: - return "saxon, xalan"; - } + case "xalan": + resp.header("processor", Xalan.getVersion()); + timeStart = System.currentTimeMillis(); + try { + tmp = Xalan.processXPath(data, query).trim(); + responseMap.put("result", tmp); + responseMap.put("status", "OK"); + } catch (Exception ex) { + LOG.error("Error on processing XPath using Xalan. " + ex); + responseMap.put("result", ex.getMessage()); + responseMap.put("status", "ERR"); + resp.status(400); + } + duration = System.currentTimeMillis() - timeStart; + LOG.info("Request: " + body + " processed in " + duration + " ms."); + responseMap.put("processor", Xalan.getVersion()); + responseMap.put("result", tmp); + responseMap.put("time", Long.toString(duration)); + resp.body(mapper.writeValueAsString(responseMap)); + return resp; - } catch (Exception ex) { - ex.printStackTrace(); - return ex.getMessage(); + default: + return "saxon, xalan"; } }; /** * Handler that returns outcome of xslt transformation and processor data */ - private static Route xsltHandler = (Request req, Response resp) -> { + private static final Route xsltHandler = (Request req, Response resp) -> { String body = req.body(); ObjectMapper mapper = new ObjectMapper(); - Map jsonMap = null; + Map jsonMap = new HashMap<>(); Map responseMap = new HashMap<>(); try { jsonMap = mapper.readValue(body, Map.class); - System.out.println(jsonMap); } catch (JsonMappingException ex) { - ex.printStackTrace(); + LOG.error("JSON mapping error. " + ex); } String data = jsonMap.get("data"); String query = jsonMap.get("process"); @@ -189,52 +189,51 @@ public class SparkInitializer { if (processor == null) { return "saxon, xalan"; } - try { - String tmp; - long timeStart; - long duration; - switch (processor) { - case "saxon": - timeStart = System.currentTimeMillis(); - try { - tmp = Saxon.processXSLT(data, query); - responseMap.put("result", tmp); - responseMap.put("status", "OK"); - } catch (Exception ex) { - responseMap.put("result", ex.getMessage()); - responseMap.put("status", "ERR"); - resp.status(400); - } + String tmp; + long timeStart; + long duration; + switch (processor) { + case "saxon": + timeStart = System.currentTimeMillis(); + try { + tmp = Saxon.processXSLT(data, query); + responseMap.put("result", tmp); + responseMap.put("status", "OK"); + } catch (Exception ex) { + LOG.error("Error on processing XSLT using Saxon. " + ex); + responseMap.put("result", ex.getMessage()); + responseMap.put("status", "ERR"); + resp.status(400); + } + duration = System.currentTimeMillis() - timeStart; + LOG.info("Request: " + body + " processed in " + duration + " ms."); + responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version); + responseMap.put("time", Long.toString(duration)); + resp.body(mapper.writeValueAsString(responseMap)); + return resp; - duration = System.currentTimeMillis() - timeStart; - responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version); - responseMap.put("time", Long.toString(duration)); - resp.body(mapper.writeValueAsString(responseMap)); - return resp; + case "xalan": + timeStart = System.currentTimeMillis(); + try { + tmp = Xalan.processXSLT(data, query); + responseMap.put("result", tmp); + responseMap.put("status", "OK"); + } catch (Exception ex) { + LOG.error("Error on processing XSLT using Xalan. " + ex); + responseMap.put("result", ex.getMessage()); + responseMap.put("status", "ERR"); + resp.status(400); + } + duration = System.currentTimeMillis() - timeStart; + LOG.info("Request: " + body + " processed in " + duration + " ms."); + responseMap.put("processor", Xalan.getVersion()); + responseMap.put("time", Long.toString(duration)); + resp.body(mapper.writeValueAsString(responseMap)); + return resp; - case "xalan": - timeStart = System.currentTimeMillis(); - try { - tmp = Xalan.processXSLT(data, query); - responseMap.put("result", tmp); - responseMap.put("status", "OK"); - } catch (Exception ex) { - responseMap.put("result", ex.getMessage()); - responseMap.put("status", "ERR"); - resp.status(400); - } - duration = System.currentTimeMillis() - timeStart; - responseMap.put("processor", Xalan.getVersion()); - responseMap.put("time", Long.toString(duration)); - resp.body(mapper.writeValueAsString(responseMap)); - return resp; - - default: - return "saxon, xalan"; - } - } catch (Exception ex) { - return ex.getMessage(); + default: + return "saxon, xalan"; } }; } diff --git a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/NewNamespaceResolver.java b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/NewNamespaceResolver.java index f89da0b..ba8a439 100644 --- a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/NewNamespaceResolver.java +++ b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/NewNamespaceResolver.java @@ -1,11 +1,10 @@ package com.r11.tools.xslt.processors; -import net.sf.saxon.om.NamespaceBinding; import net.sf.saxon.om.NamespaceMap; import net.sf.saxon.s9api.XPathCompiler; import net.sf.saxon.s9api.XdmNode; - -import java.util.Iterator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * Handler for saxon namespace scan engine. @@ -13,6 +12,7 @@ import java.util.Iterator; * @author Wojciech Czop */ public class NewNamespaceResolver { + private static final Logger LOG = LogManager.getLogger("NewNamespaceResolver"); private NamespaceMap namespaceMap; @@ -21,12 +21,13 @@ public class NewNamespaceResolver { * @param doc dom structure object * @return map of namespaces */ + + // TODO: Closer inspection. Return value is never used according to IntelliJ + // public NamespaceMap process(XdmNode doc) { namespaceMap = NamespaceMap.emptyMap(); - Iterator it = doc.children().iterator(); -// TODO: remove - while (it.hasNext()) { - XdmNode tmp = it.next(); + // TODO: remove + for (XdmNode tmp : doc.children()) { extractNamespace(tmp); } // end @@ -38,12 +39,6 @@ public class NewNamespaceResolver { * @param compiler compiler used to compile xpath statements */ public void exportNamespaces(XPathCompiler compiler){ - Iterator it = namespaceMap.iterator(); -// TODO: remove - while(it.hasNext()){ - System.out.println(it.next()); - } -// end namespaceMap.forEach(namespaceBinding -> compiler.declareNamespace(namespaceBinding.getPrefix(), namespaceBinding.getURI())); } @@ -58,17 +53,11 @@ public class NewNamespaceResolver { } if (node.children().iterator().hasNext()) { - Iterator it = node.children().iterator(); - while (it.hasNext()) { - XdmNode rNode = it.next(); -// TODO: remove - if(rNode.getUnderlyingNode().getPrefix().isEmpty() && !rNode.getParent().getUnderlyingNode().getPrefix().isEmpty()){ - - System.out.println("prefix missing, parent has "+rNode.getParent().getUnderlyingNode().getPrefix() + ", but child has none"); - - System.out.println(); + for (XdmNode rNode : node.children()) { + if (rNode.getUnderlyingNode().getPrefix().isEmpty() && !rNode.getParent().getUnderlyingNode().getPrefix().isEmpty()) { + LOG.warn("Missing prefix. Parent has " + rNode.getParent().getUnderlyingNode().getPrefix() + ", but child has none"); } -// end + extractNamespace(rNode); } } diff --git a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Saxon.java b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Saxon.java index 34ee6a4..f4f10fe 100644 --- a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Saxon.java +++ b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Saxon.java @@ -1,6 +1,9 @@ package com.r11.tools.xslt.processors; import net.sf.saxon.s9api.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import javax.xml.transform.stream.StreamSource; import java.io.StringReader; import java.io.StringWriter; diff --git a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Xalan.java b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Xalan.java index b85a089..42db619 100644 --- a/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Xalan.java +++ b/Backend/xslt-rest/src/main/java/com/r11/tools/xslt/processors/Xalan.java @@ -1,5 +1,7 @@ package com.r11.tools.xslt.processors; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -25,6 +27,7 @@ import java.io.StringWriter; * @author Wojciech Czop */ public class Xalan { + /** * Transforms string containing xml document via xslt * @param data xml to be transformed diff --git a/Backend/xslt-rest/src/main/resources/log4j2.xml b/Backend/xslt-rest/src/main/resources/log4j2.xml new file mode 100644 index 0000000..f0933e3 --- /dev/null +++ b/Backend/xslt-rest/src/main/resources/log4j2.xml @@ -0,0 +1,21 @@ + + + + + + + + + %d{HH:mm:ss.SSS} [%c] %-5level - %msg%n + + + + + + + + + + + + \ No newline at end of file