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