From 559a21b1ecbfb18c5aacfb7d4d660f3265d3fdf3 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Mon, 5 Jun 2023 14:53:27 +0200 Subject: [PATCH 01/30] Added draft page for XQuery tool and connected it to menu --- Frontend/assets/scripts/frame.js | 1 + Frontend/assets/scripts/tools/xquery.js | 100 ++++++++++++++++++++++++ Frontend/index.html | 1 + Frontend/tools/xquery.html | 89 +++++++++++++++++++++ 4 files changed, 191 insertions(+) create mode 100644 Frontend/assets/scripts/tools/xquery.js create mode 100644 Frontend/tools/xquery.html diff --git a/Frontend/assets/scripts/frame.js b/Frontend/assets/scripts/frame.js index 5b89901..75781ec 100644 --- a/Frontend/assets/scripts/frame.js +++ b/Frontend/assets/scripts/frame.js @@ -25,6 +25,7 @@ function init() { tools.set("xpath", "tools/xpath.html"); tools.set("xsd", "tools/xsd.html"); tools.set("xslt", "tools/xslt.html"); + tools.set("xquery", "tools/xquery.html"); tools.set("xmlform", "tools/xmlFormatter.html"); tools.set("jsonform", "tools/jsonFormatter.html"); tools.set("mock", "tools/mock.html"); diff --git a/Frontend/assets/scripts/tools/xquery.js b/Frontend/assets/scripts/tools/xquery.js new file mode 100644 index 0000000..4e61cb1 --- /dev/null +++ b/Frontend/assets/scripts/tools/xquery.js @@ -0,0 +1,100 @@ +/** + * The `processTooltip()` function is responsible for updating the display of the tooltip based on the selected version of the processor. + * It shows or hides different sections of the tooltip based on the selected version. + * It also handles the click event on the form and updates the tooltip accordingly. + * + * @function + * @name processTooltip + * @kind function + */ +function processTooltip() { + + if (getProcessor() == "xalan" || getProcessor() == "libxml") { + document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; + document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; + hideList(document.getElementsByName("collapse30")); + } else { + document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; + document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; + showList(document.getElementsByName("collapse30")); + } +} + + +/** + * This function is executed after the page is loaded. + * + * @function + * @name init + * @kind function + */ +function init() { + // Make sure that only plain text is pasted + configurePastingInElement("xmlArea"); + configurePastingInElement("transformArea"); + + //Handle clicks in whole form and set info in tooltip + setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); + setDefaultContent(document.getElementById("transformArea"), 'Insert XSLT here'); + + // refreshTooltip(); + processTooltip(); + tool.addEventListener('click', event => { + //Check if script was called from textarea or selector + var targetID = event.target.getAttribute('id'); + if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { + return; + } + + processTooltip(); + }) + + tool.addEventListener('change', event => { + //Check if script was called from textarea or selector + var targetID = event.target.getAttribute('id'); + if (targetID !== "processors") { + return; + } + + processTooltip(); + + }) + + var triggerList = document.getElementsByClassName("collapseTrigger"); + for (i = 0; i < triggerList.length; i++) { + + triggerList[i].addEventListener("click", function () { + + var collapsible = this.parentElement; + var collapsibleData = this.nextElementSibling; + if (collapsibleData.style.maxHeight > "0px") { + collapsibleData.style.maxHeight = "0px"; + + this.classList.toggle("active", false); + if (!this.classList.contains("collapsibleMini")) { + collapsible.classList.toggle("active", false); + } + + var subLists1 = collapsibleData.getElementsByClassName("content"); + var subLists2 = collapsibleData.getElementsByClassName("active"); + for (j = 0; j < subLists1.length; j++) { + subLists1[j].style.maxHeight = "0px"; + } + for (j = 0; j < subLists2.length; j++) { + subLists2[j].classList.toggle("active", false); + } + } else { + collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; + + this.classList.toggle("active", true); + if (!this.classList.contains("collapsibleMini")) { + collapsible.classList.toggle("active", true); + } else { + var parentContent = this.closest(".content"); + parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; + } + } + }); + } + +} \ No newline at end of file diff --git a/Frontend/index.html b/Frontend/index.html index d8aeaa6..1e7b80a 100644 --- a/Frontend/index.html +++ b/Frontend/index.html @@ -36,6 +36,7 @@
  • XPath
  • XSLT
  • XSD
  • +
  • XQuery
  • XML Formatter
  • JSON Formatter
  • diff --git a/Frontend/tools/xquery.html b/Frontend/tools/xquery.html new file mode 100644 index 0000000..31c1c45 --- /dev/null +++ b/Frontend/tools/xquery.html @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    Online XQuery tester

    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + procInfo
    +
    + + +
    +
    + +
    + +
    + +
    +
    +
    +
    + +
    + + +
    + +
    +
    +
    +

    What is XSLT?

    + TBD +
    + + +
    + + + + + + + + \ No newline at end of file -- 2.51.0 From 5e666c922c7c7eeb9c4e90e842129b3a675cd67c Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Mon, 5 Jun 2023 15:05:31 +0200 Subject: [PATCH 02/30] Removed unused code --- Frontend/assets/scripts/tools/xquery.js | 27 ------------------------- Frontend/tools/xquery.html | 12 +++++------ 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/Frontend/assets/scripts/tools/xquery.js b/Frontend/assets/scripts/tools/xquery.js index 4e61cb1..ca74bce 100644 --- a/Frontend/assets/scripts/tools/xquery.js +++ b/Frontend/assets/scripts/tools/xquery.js @@ -1,26 +1,3 @@ -/** - * The `processTooltip()` function is responsible for updating the display of the tooltip based on the selected version of the processor. - * It shows or hides different sections of the tooltip based on the selected version. - * It also handles the click event on the form and updates the tooltip accordingly. - * - * @function - * @name processTooltip - * @kind function - */ -function processTooltip() { - - if (getProcessor() == "xalan" || getProcessor() == "libxml") { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT 1.0"; - hideList(document.getElementsByName("collapse30")); - } else { - document.getElementById("tooltipFunctionInfo").innerText = "XSLT 1.0, 2.0 & 3.0 functions"; - document.getElementById("processorTooltipInfo").innerText = "Supports XSLT up to 3.0"; - showList(document.getElementsByName("collapse30")); - } -} - - /** * This function is executed after the page is loaded. * @@ -45,8 +22,6 @@ function init() { if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { return; } - - processTooltip(); }) tool.addEventListener('change', event => { @@ -56,8 +31,6 @@ function init() { return; } - processTooltip(); - }) var triggerList = document.getElementsByClassName("collapseTrigger"); diff --git a/Frontend/tools/xquery.html b/Frontend/tools/xquery.html index 31c1c45..1d85ed6 100644 --- a/Frontend/tools/xquery.html +++ b/Frontend/tools/xquery.html @@ -28,11 +28,9 @@ - @@ -48,7 +46,7 @@ - procInfo
    + Supports XQuery up to 3.1

    @@ -67,13 +65,13 @@ onclick="performRequest('xquery', true, true)">Execute XQuery
    - +
    -

    What is XSLT?

    +

    What is XQuery?

    TBD
    -- 2.51.0 From 17fbc0a3a700dc23d2636d3af1c2adde62d20e21 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 10:52:07 +0200 Subject: [PATCH 03/30] Implemented methods on backend --- .../main/java/com/r11/tools/xml/Saxon.java | 22 +++++++++++++++++++ .../main/java/com/r11/tools/xml/Xalan.java | 5 +++++ .../java/com/r11/tools/xml/XmlEngine.java | 2 ++ 3 files changed, 29 insertions(+) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index f9f330b..076c385 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -39,6 +39,28 @@ public class Saxon implements XmlEngine{ throw new UnsupportedOperationException(); } + /** + * This method evaluates XQuery exporession on given xml + * @param data xml + * @param xquery expression + * @return + * @throws Exception + */ + @Override + public String executeXQuery(String data, String xquery) throws Exception { + Processor processor = new Processor(false); + + XQueryCompiler compiler = processor.newXQueryCompiler(); + + XQueryExecutable executable = compiler.compile(xquery); + + XQueryEvaluator evaluator = executable.load(); + evaluator.setSource(new StreamSource(new StringReader(data))); + + XdmValue result = evaluator.evaluate(); + return result.toString(); + } + /** * Process xpath and return either node or wrapped atomic value * @param data xml to be querried diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java index 51ad04f..97154ae 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java @@ -133,4 +133,9 @@ public class Xalan implements XmlEngine{ validator.validate(dataSource); return "XML file is valid"; } + + @Override + public String executeXQuery(String data, String xquery) throws Exception { + throw new UnsupportedOperationException("Xalan doesn't support XQuery evaluation"); + } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java index 5742073..73bd01a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java @@ -7,6 +7,8 @@ public interface XmlEngine { String processXSLT(String data, String transform) throws Exception; String validate(String data, String xsd) throws Exception; + String executeXQuery(String data, String xquery) throws Exception; + public String getVersion(); } -- 2.51.0 From 539a2fc1ea7f7f37a6feee52b4d943ea6916ccb7 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:39:11 +0200 Subject: [PATCH 04/30] Finished implementing backend --- .../java/com/r11/tools/SparkApplication.java | 7 +- .../tools/controller/XQueryController.java | 103 ++++++++++++++++++ .../r11/tools/controller/XsltController.java | 4 +- .../main/java/com/r11/tools/xml/Saxon.java | 3 +- .../main/java/com/r11/tools/xml/Xalan.java | 2 +- .../java/com/r11/tools/xml/XmlEngine.java | 2 +- 6 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java diff --git a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java index 58149be..4908e9b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java @@ -2,11 +2,7 @@ package com.r11.tools; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.r11.tools.controller.JsonController; -import com.r11.tools.controller.ProcessorInfoController; -import com.r11.tools.controller.XPathController; -import com.r11.tools.controller.XsdController; -import com.r11.tools.controller.XsltController; +import com.r11.tools.controller.*; import com.r11.tools.controller.internal.RestControllerRegistry; import com.r11.tools.xml.Saxon; import com.r11.tools.xml.Xalan; @@ -48,6 +44,7 @@ public class SparkApplication { registry.registerController(new XPathController(gson, logger, saxon, xalan)); registry.registerController(new XsltController(gson, logger, saxon, xalan)); registry.registerController(new JsonController(gson, jsongson, logger)); + registry.registerController(new XQueryController(gson, logger, saxon)); registry.register(); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java new file mode 100644 index 0000000..5bf7206 --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -0,0 +1,103 @@ +package com.r11.tools.controller; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.r11.tools.controller.internal.GlobalControllerManifest; +import com.r11.tools.controller.internal.HandlerType; +import com.r11.tools.controller.internal.RestController; +import com.r11.tools.controller.internal.ScopedControllerManifest; +import com.r11.tools.xml.XmlEngine; +import org.apache.logging.log4j.Logger; +import spark.Request; +import spark.Response; + +@GlobalControllerManifest +public class XQueryController implements RestController { + + private final Gson gson; + private final Logger logger; + private final XmlEngine saxon; + + public XQueryController(Gson gson, Logger logger, XmlEngine saxon) { + this.gson = gson; + this.logger = logger; + this.saxon = saxon; + } + + private JsonObject prepareErrorResponse(String message, String processor) { + JsonObject result = new JsonObject(); + result.addProperty("result", message); + result.addProperty("processor", processor); + result.addProperty("status", "ERR"); + result.addProperty("time", "N/A"); + return result; + } + + @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") + public void transform(Request request, Response response) { + + JsonObject requestBody; + JsonObject responseJson; + try { + requestBody = this.gson.fromJson(request.body(), JsonObject.class); + } catch (Exception e) { + responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + + response.status(400); + response.body(this.gson.toJson(responseJson)); + return; + } + + String data = requestBody.get("data").getAsString(); + String query = requestBody.get("process").getAsString(); + String processor = requestBody.get("processor").getAsString(); + String version = requestBody.get("version").getAsString(); + + try { + if (processor.equals("saxon")) { + processWithSaxon(response, data, query, version); + } + else + response.body("saxon"); + } catch (Exception e) { + responseJson = prepareErrorResponse(e.getMessage(), "Saxon"); + + response.status(400); + response.body(this.gson.toJson(responseJson)); + } + + + } + + private void processWithSaxon(Response response, String data, String query, String version) { + JsonObject responseJson = new JsonObject(); + long duration; + String result; + long timeStart; + timeStart = System.currentTimeMillis(); + try { + result = saxon.executeXQuery(data, query, version); + + response.status(200); + + responseJson.addProperty("result", result); + responseJson.addProperty("status", "OK"); + } catch (Exception ex) { + this.logger.error("Error on processing XQuery using Saxon. " + ex); + + response.status(400); + + responseJson.addProperty("result", ex.getMessage()); + responseJson.addProperty("status", "ERR"); + } + + duration = System.currentTimeMillis() - timeStart; + this.logger.info("Request (XQuery, Saxon) processed in " + duration + " ms."); + + responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); + responseJson.addProperty("time", duration); + + response.body(this.gson.toJson(responseJson)); + } + +} diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 29e0fd6..d318b0f 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -6,8 +6,6 @@ import com.r11.tools.controller.internal.GlobalControllerManifest; import com.r11.tools.controller.internal.HandlerType; import com.r11.tools.controller.internal.RestController; import com.r11.tools.controller.internal.ScopedControllerManifest; -import com.r11.tools.xml.Saxon; -import com.r11.tools.xml.Xalan; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -126,7 +124,7 @@ public class XsltController implements RestController { duration = System.currentTimeMillis() - timeStart; this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version); + responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); responseJson.addProperty("time", duration); response.body(this.gson.toJson(responseJson)); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index 076c385..3da842f 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -47,10 +47,11 @@ public class Saxon implements XmlEngine{ * @throws Exception */ @Override - public String executeXQuery(String data, String xquery) throws Exception { + public String executeXQuery(String data, String xquery, String version) throws Exception { Processor processor = new Processor(false); XQueryCompiler compiler = processor.newXQueryCompiler(); + compiler.setLanguageVersion(version); XQueryExecutable executable = compiler.compile(xquery); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java index 97154ae..a85680d 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java @@ -135,7 +135,7 @@ public class Xalan implements XmlEngine{ } @Override - public String executeXQuery(String data, String xquery) throws Exception { + public String executeXQuery(String data, String xquery, String version) throws Exception { throw new UnsupportedOperationException("Xalan doesn't support XQuery evaluation"); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java index 73bd01a..6091658 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java @@ -7,7 +7,7 @@ public interface XmlEngine { String processXSLT(String data, String transform) throws Exception; String validate(String data, String xsd) throws Exception; - String executeXQuery(String data, String xquery) throws Exception; + String executeXQuery(String data, String xquery, String version) throws Exception; public String getVersion(); -- 2.51.0 From 8d6aede327d214e872fa387522d5db14b73fa84e Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:39:28 +0200 Subject: [PATCH 05/30] Added samples for XQuery --- Samples/xquery/sampleXML.xml | 33 +++++++++++++++++++++++++++++++++ Samples/xquery/xquery.curl | 4 ++++ Samples/xquery/xquery.json | 6 ++++++ 3 files changed, 43 insertions(+) create mode 100644 Samples/xquery/sampleXML.xml create mode 100644 Samples/xquery/xquery.curl create mode 100644 Samples/xquery/xquery.json diff --git a/Samples/xquery/sampleXML.xml b/Samples/xquery/sampleXML.xml new file mode 100644 index 0000000..cd89168 --- /dev/null +++ b/Samples/xquery/sampleXML.xml @@ -0,0 +1,33 @@ + + + City library + 345123 + + + 7321 + Adam + Choke + + + 5123 + Lauren + Wong + + + + + 6422 + Harry Potter + 7542 + + + 1234 + Macbeth + 5123 + + + 9556 + Romeo and Juliet + + + \ No newline at end of file diff --git a/Samples/xquery/xquery.curl b/Samples/xquery/xquery.curl new file mode 100644 index 0000000..2e4c4fc --- /dev/null +++ b/Samples/xquery/xquery.curl @@ -0,0 +1,4 @@ +url = "localhost/java/xquery" +#url = "localhost/libxml/xslt" +data = "@xquery.json" +request = POST diff --git a/Samples/xquery/xquery.json b/Samples/xquery/xquery.json new file mode 100644 index 0000000..f4d96bb --- /dev/null +++ b/Samples/xquery/xquery.json @@ -0,0 +1,6 @@ +{ + "data": "John67Anna69", + "process": "for $x in //person return string($x/name)", + "processor": "saxon", + "version": "3.1" +} -- 2.51.0 From f4c5ad753b64c9020e9bf5e53afb36facd68aa13 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:41:35 +0200 Subject: [PATCH 06/30] Adjusted XQuery version selection --- Frontend/tools/xquery.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Frontend/tools/xquery.html b/Frontend/tools/xquery.html index 1d85ed6..fd0a56a 100644 --- a/Frontend/tools/xquery.html +++ b/Frontend/tools/xquery.html @@ -31,9 +31,8 @@
    -- 2.51.0 From b65962247ab237f15671b74fe607d1f7759c124e Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:52:26 +0200 Subject: [PATCH 07/30] Added default XQuery file --- Frontend/assets/samples/sampleXQuery.xquery | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Frontend/assets/samples/sampleXQuery.xquery diff --git a/Frontend/assets/samples/sampleXQuery.xquery b/Frontend/assets/samples/sampleXQuery.xquery new file mode 100644 index 0000000..0a124d5 --- /dev/null +++ b/Frontend/assets/samples/sampleXQuery.xquery @@ -0,0 +1,7 @@ +declare namespace p="http://www.release11.com/person"; +declare namespace b="http://www.release11.com/book"; +declare namespace l="http://www.release11.com/library"; + + +for $x in //p:person +return string($x/p:name) \ No newline at end of file -- 2.51.0 From 79b9a54334ede216bfff35a11ecf944e2c37166b Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:52:39 +0200 Subject: [PATCH 08/30] Connected frontend and backend --- Frontend/assets/scripts/tools/scripts.js | 18 ++++++++++++++++++ Frontend/tools/xquery.html | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Frontend/assets/scripts/tools/scripts.js b/Frontend/assets/scripts/tools/scripts.js index 729ee8e..911aaad 100644 --- a/Frontend/assets/scripts/tools/scripts.js +++ b/Frontend/assets/scripts/tools/scripts.js @@ -135,6 +135,24 @@ function fillDefaultXSLT() { } ) } +/** + * The `fillDefaultXQuery()` function fetches a default XQuery from the server and sets the value of the element with id "transformArea" to the fetched template. + * + * @function + * @name fillDefaultXQuery + * @kind function + * @returns {void} + */ +function fillDefaultXQuery() { + const serverAddress = window.location.protocol + "//" + window.location.hostname; + fetch(serverAddress + "/assets/samples/sampleXQuery.xquery") + .then( response => response.text() ) + .then( (XQueryTemplate) => { + document.getElementById('transformArea').innerText = XQueryTemplate; + highlightSyntax("transformArea"); + } ) +} + /** * It sets default content for the element an changes it's color to grey * diff --git a/Frontend/tools/xquery.html b/Frontend/tools/xquery.html index fd0a56a..8a4ee1d 100644 --- a/Frontend/tools/xquery.html +++ b/Frontend/tools/xquery.html @@ -55,7 +55,7 @@
    - +
    -- 2.51.0 From 1d668f10f8c7a1add1809842f3276ec4a46c0afd Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 13:56:52 +0200 Subject: [PATCH 09/30] Added 'What is XQuery?' section --- Frontend/tools/xquery.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Frontend/tools/xquery.html b/Frontend/tools/xquery.html index 8a4ee1d..682f04b 100644 --- a/Frontend/tools/xquery.html +++ b/Frontend/tools/xquery.html @@ -21,7 +21,7 @@
    -

    Online XQuery tester

    +

    Online XQuery Interpreter

    @@ -45,7 +45,7 @@
    - Supports XQuery up to 3.1
    + Supports XQuery up to 4.0

    @@ -71,7 +71,8 @@

    What is XQuery?

    - TBD +

    XQuery (XML Query) is a query and functional programming language that queries and transforms collections of structured and unstructured data, usually in the form of XML, text and with vendor-specific extensions for other data formats (JSON, binary, etc.).

    +

    Source: Wikipedia

    -- 2.51.0 From 5a1ad5282fa2fe7dd608779341697bf2c7fdc41e Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Tue, 6 Jun 2023 14:02:51 +0200 Subject: [PATCH 10/30] Remove unneeded code --- Frontend/assets/scripts/tools/xquery.js | 60 ------------------------- 1 file changed, 60 deletions(-) diff --git a/Frontend/assets/scripts/tools/xquery.js b/Frontend/assets/scripts/tools/xquery.js index ca74bce..e723a8c 100644 --- a/Frontend/assets/scripts/tools/xquery.js +++ b/Frontend/assets/scripts/tools/xquery.js @@ -10,64 +10,4 @@ function init() { configurePastingInElement("xmlArea"); configurePastingInElement("transformArea"); - //Handle clicks in whole form and set info in tooltip - setDefaultContent(document.getElementById("xmlArea"), 'Insert XML here'); - setDefaultContent(document.getElementById("transformArea"), 'Insert XSLT here'); - - // refreshTooltip(); - processTooltip(); - tool.addEventListener('click', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "processors" && targetID !== "xmlArea" && targetID !== "transformArea" && targetID !== "versions") { - return; - } - }) - - tool.addEventListener('change', event => { - //Check if script was called from textarea or selector - var targetID = event.target.getAttribute('id'); - if (targetID !== "processors") { - return; - } - - }) - - var triggerList = document.getElementsByClassName("collapseTrigger"); - for (i = 0; i < triggerList.length; i++) { - - triggerList[i].addEventListener("click", function () { - - var collapsible = this.parentElement; - var collapsibleData = this.nextElementSibling; - if (collapsibleData.style.maxHeight > "0px") { - collapsibleData.style.maxHeight = "0px"; - - this.classList.toggle("active", false); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", false); - } - - var subLists1 = collapsibleData.getElementsByClassName("content"); - var subLists2 = collapsibleData.getElementsByClassName("active"); - for (j = 0; j < subLists1.length; j++) { - subLists1[j].style.maxHeight = "0px"; - } - for (j = 0; j < subLists2.length; j++) { - subLists2[j].classList.toggle("active", false); - } - } else { - collapsibleData.style.maxHeight = (collapsibleData.scrollHeight) + "px"; - - this.classList.toggle("active", true); - if (!this.classList.contains("collapsibleMini")) { - collapsible.classList.toggle("active", true); - } else { - var parentContent = this.closest(".content"); - parentContent.style.maxHeight = (parentContent.scrollHeight + collapsibleData.scrollHeight) + "px"; - } - } - }); - } - } \ No newline at end of file -- 2.51.0 From 424bb57c424b76a5f2ffc37e7af854ec252b9097 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 10:17:47 +0200 Subject: [PATCH 11/30] Tidied up code --- .../r11/tools/controller/XPathController.java | 76 +++++++++---------- .../tools/controller/XQueryController.java | 4 + .../r11/tools/controller/XsdController.java | 42 +++++----- .../r11/tools/controller/XsltController.java | 75 +++++++++--------- 4 files changed, 94 insertions(+), 103 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index a188566..14e4847 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -24,6 +24,15 @@ public class XPathController implements RestController { this.xalan = xalan; } + private JsonObject prepareErrorResponse(String message, String processor) { + JsonObject result = new JsonObject(); + result.addProperty("result", message); + result.addProperty("processor", processor); + result.addProperty("status", "ERR"); + result.addProperty("time", "N/A"); + return result; + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") public void transform(Request request, Response response) { String body = request.body(); @@ -32,12 +41,7 @@ public class XPathController implements RestController { try { requestJson = this.gson.fromJson(body, JsonObject.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); - + JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseJson)); return; @@ -67,11 +71,7 @@ public class XPathController implements RestController { } private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { - long timeStart; - long duration; - response.header("processor", xalan.getVersion()); - timeStart = System.currentTimeMillis(); - + long timeStart = System.currentTimeMillis(); try { XPathQueryResult xPathQueryResult = xalan.processXPath(data, query, ""); @@ -80,53 +80,45 @@ public class XPathController implements RestController { responseJson.addProperty("result", xPathQueryResult.getData().trim()); responseJson.addProperty("status", "OK"); responseJson.addProperty("type", xPathQueryResult.getType()); - } catch (Exception ex) { - this.logger.error("Error on processing XPath using Xalan. " + ex); + responseJson.addProperty("processor", xalan.getVersion()); + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + + this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); + } catch (Exception ex) { + responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); response.status(400); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on processing XPath using Xalan. " + ex); + } finally { + response.body(this.gson.toJson(responseJson)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); - - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { - long timeStart; - String tmp; - long duration; - response.header("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); - timeStart = System.currentTimeMillis(); - + long timeStart = System.currentTimeMillis(); try { - tmp = saxon.processXPath(data, query, version).getData().trim(); + String result = saxon.processXPath(data, query, version).getData().trim(); response.status(200); - responseJson.addProperty("result", tmp); + responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); + responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); + + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + + this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { - this.logger.error("Error on processing XPath using Saxon. " + ex); - + responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); response.status(400); - - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on processing XPath using Saxon. " + ex); + } finally { + response.body(this.gson.toJson(responseJson)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 5bf7206..befe5ce 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -11,6 +11,10 @@ import org.apache.logging.log4j.Logger; import spark.Request; import spark.Response; +/** + * Controller used to handle XQuery tool. Currently, it supports Saxon engine + * @author Adam Bem + */ @GlobalControllerManifest public class XQueryController implements RestController { diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 3a04ce6..db801d6 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -26,6 +26,14 @@ public class XsdController implements RestController { this.xalan = xalan; } + private JsonObject prepareErrorResponse(String message, String processor) { + JsonObject result = new JsonObject(); + result.addProperty("result", message); + result.addProperty("processor", processor); + result.addProperty("status", "ERR"); + result.addProperty("time", "N/A"); + return result; + } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") public Response transform(Request request, Response response) { String body = request.body(); @@ -34,11 +42,7 @@ public class XsdController implements RestController { try { requestJson = this.gson.fromJson(body, JsonObject.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); + JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseJson)); @@ -48,34 +52,28 @@ public class XsdController implements RestController { String data = requestJson.get("data").getAsString(); String xsd = requestJson.get("process").getAsString(); - response.header("processor", xalan.getVersion()); - - long timeStart = System.currentTimeMillis(); - String tmp; - JsonObject responseJson = new JsonObject(); try { - tmp = xalan.validate(data, xsd).trim(); + long timeStart = System.currentTimeMillis(); + String result = xalan.validate(data, xsd).trim(); response.status(200); - responseJson.addProperty("result", tmp); + responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); - } catch (Exception ex) { - this.logger.error("Error on validation against XSD using Xalan. " + ex); + responseJson.addProperty("processor", xalan.getVersion()); + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + + this.logger.info("Request (XSD, Xalan) processed in " + duration + " ms."); + } catch (Exception ex) { + responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); response.status(400); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on validation against XSD using Xalan. " + ex); } - long duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSD, Xalan) processed in " + duration + " ms."); - - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - response.body(this.gson.toJson(responseJson)); return response; } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index d318b0f..f1f1c8a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -27,6 +27,14 @@ public class XsltController implements RestController { this.xalan = xalan; } + private JsonObject prepareErrorResponse(String message, String processor) { + JsonObject result = new JsonObject(); + result.addProperty("result", message); + result.addProperty("processor", processor); + result.addProperty("status", "ERR"); + result.addProperty("time", "N/A"); + return result; + } @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") public void transform(Request request, Response response) { String body = request.body(); @@ -35,11 +43,7 @@ public class XsltController implements RestController { try { requestJson = this.gson.fromJson(body, JsonObject.class); } catch (Exception e) { - JsonObject responseJson = new JsonObject(); - responseJson.addProperty("result", e.getMessage()); - responseJson.addProperty("processor", "N/A"); - responseJson.addProperty("status", "ERR"); - responseJson.addProperty("time", "N/A"); + JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseJson)); @@ -71,62 +75,55 @@ public class XsltController implements RestController { } private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { - long duration; - long timeStart; - String tmp; - timeStart = System.currentTimeMillis(); + long timeStart = System.currentTimeMillis(); try { - tmp = xalan.processXSLT(data, query); + String result = xalan.processXSLT(data, query); response.status(200); - responseJson.addProperty("result", tmp); + responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); + responseJson.addProperty("processor", xalan.getVersion()); + + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + + this.logger.info("Request (XSLT, Xalan) processed in " + duration + " ms."); } catch (Exception ex) { + responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + response.status(400); this.logger.error("Error on processing XSLT using Xalan. " + ex); - response.status(400); - - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + } finally { + response.body(this.gson.toJson(responseJson)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSLT, Xalan) processed in " + duration + " ms."); - - responseJson.addProperty("processor", xalan.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { - long duration; - String tmp; - long timeStart; - timeStart = System.currentTimeMillis(); + long timeStart = System.currentTimeMillis(); try { - tmp = saxon.processXSLT(data, query); + String result = saxon.processXSLT(data, query); response.status(200); - responseJson.addProperty("result", tmp); + responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); - } catch (Exception ex) { - this.logger.error("Error on processing XSLT using Saxon. " + ex); + responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); + + } catch (Exception ex) { + responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); response.status(400); - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + this.logger.error("Error on processing XSLT using Saxon. " + ex); + } + finally { + response.body(this.gson.toJson(responseJson)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } } -- 2.51.0 From 800c88fc62426c1d5ff556c35dfe59fbfa6aa0c9 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 10:31:34 +0200 Subject: [PATCH 12/30] Added XMLRequestBody class and implemented it in XPath controller --- .../r11/tools/controller/XPathController.java | 30 +++++++++---------- .../controller/internal/XMLRequestBody.java | 30 +++++++++++++++++++ 2 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 14e4847..e3f426c 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -37,9 +37,9 @@ public class XPathController implements RestController { public void transform(Request request, Response response) { String body = request.body(); - JsonObject requestJson; + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(body, XMLRequestBody.class); } catch (Exception e) { JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); @@ -47,33 +47,29 @@ public class XPathController implements RestController { return; } - String data = requestJson.get("data").getAsString(); - String query = requestJson.get("process").getAsString(); - String processor = requestJson.get("processor").getAsString(); - String version = requestJson.get("version").getAsString(); - - if (processor == null) { + if (requestBody.getProcessor() == null) { response.body("saxon, xalan"); return; } JsonObject responseJson = new JsonObject(); - switch (processor) { + switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, data, query, version, responseJson); + processWithSaxon(response, requestBody, responseJson); break; case "xalan": - processWithXalan(response, data, query, responseJson); + processWithXalan(response, requestBody, responseJson); break; default: response.body("saxon, xalan"); } } - private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { + private void processWithXalan(Response response, XMLRequestBody requestBody, JsonObject responseJson) { long timeStart = System.currentTimeMillis(); try { - XPathQueryResult xPathQueryResult = xalan.processXPath(data, query, ""); + XPathQueryResult xPathQueryResult = + xalan.processXPath(requestBody.getData(), requestBody.getProcess(), ""); response.status(200); @@ -97,16 +93,18 @@ public class XPathController implements RestController { } - private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { + private void processWithSaxon(Response response, XMLRequestBody requestBody, JsonObject responseJson) { long timeStart = System.currentTimeMillis(); try { - String result = saxon.processXPath(data, query, version).getData().trim(); + String result = + saxon.processXPath(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()) + .getData().trim(); response.status(200); responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + version + " over s9api"); + responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + requestBody.getVersion() + " over s9api"); long duration = System.currentTimeMillis() - timeStart; responseJson.addProperty("time", duration); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java new file mode 100644 index 0000000..08576ce --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java @@ -0,0 +1,30 @@ +package com.r11.tools.controller.internal; + +import com.google.gson.annotations.SerializedName; + +public class XMLRequestBody { + @SerializedName("data") + private String data; + @SerializedName("process") + private String process; + @SerializedName("processor") + private String processor; + @SerializedName("version") + private String version; + + public String getData() { + return data; + } + + public String getProcess() { + return process; + } + + public String getProcessor() { + return processor; + } + + public String getVersion() { + return version; + } +} -- 2.51.0 From 4d9ef6d3c7997da5eb75c5026f638bd4ead1a0cf Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 10:39:40 +0200 Subject: [PATCH 13/30] Implemented new POJO in all XML controllers --- .../tools/controller/XQueryController.java | 51 ++++++++----------- .../r11/tools/controller/XsdController.java | 14 ++--- .../r11/tools/controller/XsltController.java | 30 ++++------- 3 files changed, 35 insertions(+), 60 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index befe5ce..eb3499a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -2,10 +2,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.r11.tools.controller.internal.GlobalControllerManifest; -import com.r11.tools.controller.internal.HandlerType; -import com.r11.tools.controller.internal.RestController; -import com.r11.tools.controller.internal.ScopedControllerManifest; +import com.r11.tools.controller.internal.*; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -40,10 +37,10 @@ public class XQueryController implements RestController { @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") public void transform(Request request, Response response) { - JsonObject requestBody; + XMLRequestBody requestBody; JsonObject responseJson; try { - requestBody = this.gson.fromJson(request.body(), JsonObject.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { responseJson = prepareErrorResponse(e.getMessage(), "N/A"); @@ -52,14 +49,9 @@ public class XQueryController implements RestController { return; } - String data = requestBody.get("data").getAsString(); - String query = requestBody.get("process").getAsString(); - String processor = requestBody.get("processor").getAsString(); - String version = requestBody.get("version").getAsString(); - try { - if (processor.equals("saxon")) { - processWithSaxon(response, data, query, version); + if (requestBody.getProcessor().equals("saxon")) { + processWithSaxon(response, requestBody); } else response.body("saxon"); @@ -73,35 +65,32 @@ public class XQueryController implements RestController { } - private void processWithSaxon(Response response, String data, String query, String version) { + private void processWithSaxon(Response response, XMLRequestBody requestBody) { JsonObject responseJson = new JsonObject(); - long duration; - String result; - long timeStart; - timeStart = System.currentTimeMillis(); + long timeStart = System.currentTimeMillis(); try { - result = saxon.executeXQuery(data, query, version); + String result = saxon.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); response.status(200); responseJson.addProperty("result", result); responseJson.addProperty("status", "OK"); + responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); + + long duration = System.currentTimeMillis() - timeStart; + responseJson.addProperty("time", duration); + + this.logger.info("Request (XQuery, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { - this.logger.error("Error on processing XQuery using Saxon. " + ex); - response.status(400); - - responseJson.addProperty("result", ex.getMessage()); - responseJson.addProperty("status", "ERR"); + responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); + + this.logger.error("Error on processing XQuery using Saxon. " + ex); + } + finally { + response.body(this.gson.toJson(responseJson)); } - duration = System.currentTimeMillis() - timeStart; - this.logger.info("Request (XQuery, Saxon) processed in " + duration + " ms."); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); - responseJson.addProperty("time", duration); - - response.body(this.gson.toJson(responseJson)); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index db801d6..854684d 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -2,10 +2,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.r11.tools.controller.internal.GlobalControllerManifest; -import com.r11.tools.controller.internal.HandlerType; -import com.r11.tools.controller.internal.RestController; -import com.r11.tools.controller.internal.ScopedControllerManifest; +import com.r11.tools.controller.internal.*; import com.r11.tools.xml.Xalan; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; @@ -38,9 +35,9 @@ public class XsdController implements RestController { public Response transform(Request request, Response response) { String body = request.body(); - JsonObject requestJson; + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(body, XMLRequestBody.class); } catch (Exception e) { JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); @@ -49,13 +46,10 @@ public class XsdController implements RestController { return response; } - String data = requestJson.get("data").getAsString(); - String xsd = requestJson.get("process").getAsString(); - JsonObject responseJson = new JsonObject(); try { long timeStart = System.currentTimeMillis(); - String result = xalan.validate(data, xsd).trim(); + String result = xalan.validate(requestBody.getData(), requestBody.getProcess()).trim(); response.status(200); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index f1f1c8a..0e15753 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -2,10 +2,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.r11.tools.controller.internal.GlobalControllerManifest; -import com.r11.tools.controller.internal.HandlerType; -import com.r11.tools.controller.internal.RestController; -import com.r11.tools.controller.internal.ScopedControllerManifest; +import com.r11.tools.controller.internal.*; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -39,9 +36,9 @@ public class XsltController implements RestController { public void transform(Request request, Response response) { String body = request.body(); - JsonObject requestJson; + XMLRequestBody requestBody; try { - requestJson = this.gson.fromJson(body, JsonObject.class); + requestBody = this.gson.fromJson(body, XMLRequestBody.class); } catch (Exception e) { JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); @@ -50,23 +47,18 @@ public class XsltController implements RestController { return; } - String data = requestJson.get("data").getAsString(); - String query = requestJson.get("process").getAsString(); - String processor = requestJson.get("processor").getAsString(); - String version = requestJson.get("version").getAsString(); - - if (processor == null) { + if (requestBody.getProcessor() == null) { response.body("saxon, xalan"); return; } JsonObject responseJson = new JsonObject(); - switch (processor) { + switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, data, query, version, responseJson); + processWithSaxon(response, requestBody, responseJson); return; case "xalan": - processWithXalan(response, data, query, responseJson); + processWithXalan(response, requestBody, responseJson); return; default: @@ -74,10 +66,10 @@ public class XsltController implements RestController { } } - private void processWithXalan(Response response, String data, String query, JsonObject responseJson) { + private void processWithXalan(Response response, XMLRequestBody requestBody, JsonObject responseJson) { long timeStart = System.currentTimeMillis(); try { - String result = xalan.processXSLT(data, query); + String result = xalan.processXSLT(requestBody.getData(), requestBody.getProcess()); response.status(200); @@ -100,10 +92,10 @@ public class XsltController implements RestController { } - private void processWithSaxon(Response response, String data, String query, String version, JsonObject responseJson) { + private void processWithSaxon(Response response, XMLRequestBody requestBody, JsonObject responseJson) { long timeStart = System.currentTimeMillis(); try { - String result = saxon.processXSLT(data, query); + String result = saxon.processXSLT(requestBody.getData(), requestBody.getProcess()); response.status(200); -- 2.51.0 From ec1ef38c57121d7cbd628a266f9f838be59826bc Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 10:46:33 +0200 Subject: [PATCH 14/30] Removed unnessesary arguments in methods --- .../com/r11/tools/controller/XPathController.java | 11 ++++++----- .../com/r11/tools/controller/XQueryController.java | 6 ++---- .../java/com/r11/tools/controller/XsdController.java | 3 +-- .../com/r11/tools/controller/XsltController.java | 12 +++++++----- .../tools/controller/internal/XMLRequestBody.java | 4 ++++ 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index e3f426c..5bbdc97 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -52,20 +52,20 @@ public class XPathController implements RestController { return; } - JsonObject responseJson = new JsonObject(); switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, requestBody, responseJson); + processWithSaxon(response, requestBody); break; case "xalan": - processWithXalan(response, requestBody, responseJson); + processWithXalan(response, requestBody); break; default: response.body("saxon, xalan"); } } - private void processWithXalan(Response response, XMLRequestBody requestBody, JsonObject responseJson) { + private void processWithXalan(Response response, XMLRequestBody requestBody) { + JsonObject responseJson = new JsonObject(); long timeStart = System.currentTimeMillis(); try { XPathQueryResult xPathQueryResult = @@ -93,7 +93,8 @@ public class XPathController implements RestController { } - private void processWithSaxon(Response response, XMLRequestBody requestBody, JsonObject responseJson) { + private void processWithSaxon(Response response, XMLRequestBody requestBody) { + JsonObject responseJson = new JsonObject(); long timeStart = System.currentTimeMillis(); try { String result = diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index eb3499a..16c3701 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -36,7 +36,6 @@ public class XQueryController implements RestController { @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") public void transform(Request request, Response response) { - XMLRequestBody requestBody; JsonObject responseJson; try { @@ -50,9 +49,8 @@ public class XQueryController implements RestController { } try { - if (requestBody.getProcessor().equals("saxon")) { + if (requestBody.getProcessor().equals("saxon")) processWithSaxon(response, requestBody); - } else response.body("saxon"); } catch (Exception e) { @@ -84,7 +82,7 @@ public class XQueryController implements RestController { } catch (Exception ex) { response.status(400); responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); - + this.logger.error("Error on processing XQuery using Saxon. " + ex); } finally { diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 854684d..e348791 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -33,11 +33,10 @@ public class XsdController implements RestController { } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") public Response transform(Request request, Response response) { - String body = request.body(); XMLRequestBody requestBody; try { - requestBody = this.gson.fromJson(body, XMLRequestBody.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 0e15753..43ab35b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -51,14 +51,14 @@ public class XsltController implements RestController { response.body("saxon, xalan"); return; } - JsonObject responseJson = new JsonObject(); + switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, requestBody, responseJson); + processWithSaxon(response, requestBody); return; case "xalan": - processWithXalan(response, requestBody, responseJson); + processWithXalan(response, requestBody); return; default: @@ -66,7 +66,8 @@ public class XsltController implements RestController { } } - private void processWithXalan(Response response, XMLRequestBody requestBody, JsonObject responseJson) { + private void processWithXalan(Response response, XMLRequestBody requestBody) { + JsonObject responseJson = new JsonObject(); long timeStart = System.currentTimeMillis(); try { String result = xalan.processXSLT(requestBody.getData(), requestBody.getProcess()); @@ -92,7 +93,8 @@ public class XsltController implements RestController { } - private void processWithSaxon(Response response, XMLRequestBody requestBody, JsonObject responseJson) { + private void processWithSaxon(Response response, XMLRequestBody requestBody) { + JsonObject responseJson = new JsonObject(); long timeStart = System.currentTimeMillis(); try { String result = saxon.processXSLT(requestBody.getData(), requestBody.getProcess()); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java index 08576ce..3d1933e 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java @@ -2,6 +2,10 @@ package com.r11.tools.controller.internal; import com.google.gson.annotations.SerializedName; +/** + * POJO class used to contain body of XML related requests + * @author Adam + */ public class XMLRequestBody { @SerializedName("data") private String data; -- 2.51.0 From 63c09f1e788250c1a1dba2336979ef550c9ba05f Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 10:47:31 +0200 Subject: [PATCH 15/30] Moved model classes to 'model' package --- .../main/java/com/r11/tools/controller/XPathController.java | 2 ++ .../main/java/com/r11/tools/controller/XQueryController.java | 1 + .../src/main/java/com/r11/tools/controller/XsdController.java | 2 +- .../src/main/java/com/r11/tools/controller/XsltController.java | 1 + .../tools/{controller/internal => model}/XMLRequestBody.java | 2 +- .../tools/{controller/internal => model}/XPathQueryResult.java | 2 +- .../tools-services/src/main/java/com/r11/tools/xml/Saxon.java | 2 +- .../tools-services/src/main/java/com/r11/tools/xml/Xalan.java | 3 +-- .../src/main/java/com/r11/tools/xml/XmlEngine.java | 2 +- 9 files changed, 10 insertions(+), 7 deletions(-) rename Backend/tools-services/src/main/java/com/r11/tools/{controller/internal => model}/XMLRequestBody.java (93%) rename Backend/tools-services/src/main/java/com/r11/tools/{controller/internal => model}/XPathQueryResult.java (90%) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 5bbdc97..41f2fd3 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -3,6 +3,8 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XPathQueryResult; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 16c3701..1cbf496 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -3,6 +3,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index e348791..0b8362f 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -3,7 +3,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; -import com.r11.tools.xml.Xalan; +import com.r11.tools.model.XMLRequestBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 43ab35b..be93500 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -3,6 +3,7 @@ package com.r11.tools.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; +import com.r11.tools.model.XMLRequestBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java similarity index 93% rename from Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java rename to Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java index 3d1933e..52e89eb 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XMLRequestBody.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java @@ -1,4 +1,4 @@ -package com.r11.tools.controller.internal; +package com.r11.tools.model; import com.google.gson.annotations.SerializedName; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java similarity index 90% rename from Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java rename to Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java index 8bb8a00..601c8c9 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/internal/XPathQueryResult.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XPathQueryResult.java @@ -1,4 +1,4 @@ -package com.r11.tools.controller.internal; +package com.r11.tools.model; /** * Class used to store data received from parser and type of that data (node, string, etc.) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index 3da842f..0e1ee4b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -1,6 +1,6 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; import net.sf.saxon.s9api.*; import javax.xml.transform.stream.StreamSource; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java index a85680d..befbe23 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java @@ -1,8 +1,7 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; import org.apache.xpath.XPathAPI; -import org.apache.xpath.objects.XObject; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.traversal.NodeIterator; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java index 6091658..132c9d4 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java @@ -1,6 +1,6 @@ package com.r11.tools.xml; -import com.r11.tools.controller.internal.XPathQueryResult; +import com.r11.tools.model.XPathQueryResult; public interface XmlEngine { XPathQueryResult processXPath(String data, String query, String version) throws Exception; -- 2.51.0 From a6593bcf1dacbcb59bb0099041f89432f08a5289 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:03:29 +0200 Subject: [PATCH 16/30] Added POJO for XML request body --- .../com/r11/tools/model/XMLResponseBody.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java new file mode 100644 index 0000000..42e52c1 --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java @@ -0,0 +1,59 @@ +package com.r11.tools.model; + +public class XMLResponseBody { + + private String result; + private String status; + private String processor; + private long duration; + + // Optional + private String type; + + public XMLResponseBody(String result, String status, String processor, long duration) { + this.result = result; + this.status = status; + this.processor = processor; + this.duration = duration; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getProcessor() { + return processor; + } + + public void setProcessor(String processor) { + this.processor = processor; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} -- 2.51.0 From 3c8f3f4d41180e1f90167b86b381e507d0a45b74 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:16:12 +0200 Subject: [PATCH 17/30] Implement response POJO in XPath controller --- .../r11/tools/controller/XPathController.java | 48 +++++++------------ .../com/r11/tools/model/XMLResponseBody.java | 8 ++-- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 41f2fd3..635fbe9 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.model.XPathQueryResult; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; @@ -26,26 +27,20 @@ public class XPathController implements RestController { this.xalan = xalan; } - private JsonObject prepareErrorResponse(String message, String processor) { - JsonObject result = new JsonObject(); - result.addProperty("result", message); - result.addProperty("processor", processor); - result.addProperty("status", "ERR"); - result.addProperty("time", "N/A"); - return result; + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, "N/A"); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") public void transform(Request request, Response response) { - String body = request.body(); XMLRequestBody requestBody; try { - requestBody = this.gson.fromJson(body, XMLRequestBody.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return; } @@ -67,36 +62,32 @@ public class XPathController implements RestController { } private void processWithXalan(Response response, XMLRequestBody requestBody) { - JsonObject responseJson = new JsonObject(); long timeStart = System.currentTimeMillis(); + XMLResponseBody responseBody = null; try { XPathQueryResult xPathQueryResult = xalan.processXPath(requestBody.getData(), requestBody.getProcess(), ""); response.status(200); - - responseJson.addProperty("result", xPathQueryResult.getData().trim()); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("type", xPathQueryResult.getType()); - responseJson.addProperty("processor", xalan.getVersion()); - long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); - + responseBody = new XMLResponseBody(xPathQueryResult.getData().trim(), + "OK", xalan.getVersion(), String.valueOf(duration)); + + responseBody.setType(xPathQueryResult.getType()); this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); } catch (Exception ex) { - responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); response.status(400); this.logger.error("Error on processing XPath using Xalan. " + ex); } finally { - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } private void processWithSaxon(Response response, XMLRequestBody requestBody) { - JsonObject responseJson = new JsonObject(); + XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { String result = @@ -105,20 +96,17 @@ public class XPathController implements RestController { response.status(200); - responseJson.addProperty("result", result); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("processor", "Saxon " + saxon.getVersion() + " " + requestBody.getVersion() + " over s9api"); - long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); + String processor = "Saxon " + saxon.getVersion() + " " + requestBody.getVersion() + " over s9api"; + responseBody = new XMLResponseBody(result, "OK", processor, String.valueOf(duration)); this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { - responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); response.status(400); this.logger.error("Error on processing XPath using Saxon. " + ex); } finally { - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java index 42e52c1..dbcca48 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java @@ -5,12 +5,12 @@ public class XMLResponseBody { private String result; private String status; private String processor; - private long duration; + private String duration; // Optional private String type; - public XMLResponseBody(String result, String status, String processor, long duration) { + public XMLResponseBody(String result, String status, String processor, String duration) { this.result = result; this.status = status; this.processor = processor; @@ -41,11 +41,11 @@ public class XMLResponseBody { this.processor = processor; } - public long getDuration() { + public String getDuration() { return duration; } - public void setDuration(long duration) { + public void setDuration(String duration) { this.duration = duration; } -- 2.51.0 From aead1109c7927d33d145eaf3b349ed93bdf4d517 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:19:17 +0200 Subject: [PATCH 18/30] Changed duration type to long --- .../java/com/r11/tools/controller/XPathController.java | 6 +++--- .../main/java/com/r11/tools/model/XMLResponseBody.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 635fbe9..62fae00 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -28,7 +28,7 @@ public class XPathController implements RestController { } private XMLResponseBody prepareErrorResponse(String message, String processor) { - return new XMLResponseBody(message, "ERR", processor, "N/A"); + return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") @@ -71,7 +71,7 @@ public class XPathController implements RestController { response.status(200); long duration = System.currentTimeMillis() - timeStart; responseBody = new XMLResponseBody(xPathQueryResult.getData().trim(), - "OK", xalan.getVersion(), String.valueOf(duration)); + "OK", xalan.getVersion(),duration); responseBody.setType(xPathQueryResult.getType()); this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); @@ -98,7 +98,7 @@ public class XPathController implements RestController { long duration = System.currentTimeMillis() - timeStart; String processor = "Saxon " + saxon.getVersion() + " " + requestBody.getVersion() + " over s9api"; - responseBody = new XMLResponseBody(result, "OK", processor, String.valueOf(duration)); + responseBody = new XMLResponseBody(result, "OK", processor, duration); this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java index dbcca48..42e52c1 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java @@ -5,12 +5,12 @@ public class XMLResponseBody { private String result; private String status; private String processor; - private String duration; + private long duration; // Optional private String type; - public XMLResponseBody(String result, String status, String processor, String duration) { + public XMLResponseBody(String result, String status, String processor, long duration) { this.result = result; this.status = status; this.processor = processor; @@ -41,11 +41,11 @@ public class XMLResponseBody { this.processor = processor; } - public String getDuration() { + public long getDuration() { return duration; } - public void setDuration(String duration) { + public void setDuration(long duration) { this.duration = duration; } -- 2.51.0 From 2f8e1dd05288b771ab8dc73fa4f2af497b73f99e Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:28:30 +0200 Subject: [PATCH 19/30] Implemented response POJO in XSD controller --- .../r11/tools/controller/XPathController.java | 2 +- .../r11/tools/controller/XsdController.java | 24 +++++++------------ 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 62fae00..6a75550 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -97,7 +97,7 @@ public class XPathController implements RestController { response.status(200); long duration = System.currentTimeMillis() - timeStart; - String processor = "Saxon " + saxon.getVersion() + " " + requestBody.getVersion() + " over s9api"; + String processor = "Saxon " + saxon.getVersion() + " over s9api"; responseBody = new XMLResponseBody(result, "OK", processor, duration); this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 0b8362f..3e567bb 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -23,13 +24,8 @@ public class XsdController implements RestController { this.xalan = xalan; } - private JsonObject prepareErrorResponse(String message, String processor) { - JsonObject result = new JsonObject(); - result.addProperty("result", message); - result.addProperty("processor", processor); - result.addProperty("status", "ERR"); - result.addProperty("time", "N/A"); - return result; + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") public Response transform(Request request, Response response) { @@ -38,36 +34,32 @@ public class XsdController implements RestController { try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseJson = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseJson)); return response; } - JsonObject responseJson = new JsonObject(); + XMLResponseBody responseBody; try { long timeStart = System.currentTimeMillis(); String result = xalan.validate(requestBody.getData(), requestBody.getProcess()).trim(); response.status(200); - responseJson.addProperty("result", result); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("processor", xalan.getVersion()); - long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); + responseBody = new XMLResponseBody(result, "OK", xalan.getVersion(), duration); this.logger.info("Request (XSD, Xalan) processed in " + duration + " ms."); } catch (Exception ex) { - responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); response.status(400); this.logger.error("Error on validation against XSD using Xalan. " + ex); } - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return response; } } -- 2.51.0 From e7e79281df1879ca55f1e80fc9f2f0d64408591f Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:32:04 +0200 Subject: [PATCH 20/30] Implemented reponse POJO in XQuery controller --- .../tools/controller/XQueryController.java | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 1cbf496..d5dce9f 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -26,26 +27,20 @@ public class XQueryController implements RestController { this.saxon = saxon; } - private JsonObject prepareErrorResponse(String message, String processor) { - JsonObject result = new JsonObject(); - result.addProperty("result", message); - result.addProperty("processor", processor); - result.addProperty("status", "ERR"); - result.addProperty("time", "N/A"); - return result; + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") public void transform(Request request, Response response) { XMLRequestBody requestBody; - JsonObject responseJson; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return; } @@ -55,39 +50,35 @@ public class XQueryController implements RestController { else response.body("saxon"); } catch (Exception e) { - responseJson = prepareErrorResponse(e.getMessage(), "Saxon"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "Saxon"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } private void processWithSaxon(Response response, XMLRequestBody requestBody) { - JsonObject responseJson = new JsonObject(); + XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { String result = saxon.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); response.status(200); - responseJson.addProperty("result", result); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); - long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); + responseBody = new XMLResponseBody(result, "OK", saxon.getVersion(), duration); this.logger.info("Request (XQuery, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { response.status(400); - responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); this.logger.error("Error on processing XQuery using Saxon. " + ex); } finally { - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } -- 2.51.0 From 1f7b53fee3681b160cdedf7e43e33b5a1fed29f5 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:35:19 +0200 Subject: [PATCH 21/30] Implemented POJO in XSLT controller --- .../r11/tools/controller/XsltController.java | 40 ++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index be93500..76fab58 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -4,6 +4,7 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; import com.r11.tools.xml.XmlEngine; import org.apache.logging.log4j.Logger; import spark.Request; @@ -25,13 +26,8 @@ public class XsltController implements RestController { this.xalan = xalan; } - private JsonObject prepareErrorResponse(String message, String processor) { - JsonObject result = new JsonObject(); - result.addProperty("result", message); - result.addProperty("processor", processor); - result.addProperty("status", "ERR"); - result.addProperty("time", "N/A"); - return result; + private XMLResponseBody prepareErrorResponse(String message, String processor) { + return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") public void transform(Request request, Response response) { @@ -41,10 +37,10 @@ public class XsltController implements RestController { try { requestBody = this.gson.fromJson(body, XMLRequestBody.class); } catch (Exception e) { - JsonObject responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); return; } @@ -68,56 +64,46 @@ public class XsltController implements RestController { } private void processWithXalan(Response response, XMLRequestBody requestBody) { - JsonObject responseJson = new JsonObject(); + XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { String result = xalan.processXSLT(requestBody.getData(), requestBody.getProcess()); - response.status(200); - responseJson.addProperty("result", result); - responseJson.addProperty("status", "OK"); - responseJson.addProperty("processor", xalan.getVersion()); - long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); + responseBody = new XMLResponseBody(result, "OK", xalan.getVersion(), duration); this.logger.info("Request (XSLT, Xalan) processed in " + duration + " ms."); } catch (Exception ex) { - responseJson = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); response.status(400); this.logger.error("Error on processing XSLT using Xalan. " + ex); } finally { - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } private void processWithSaxon(Response response, XMLRequestBody requestBody) { - JsonObject responseJson = new JsonObject(); + XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { String result = saxon.processXSLT(requestBody.getData(), requestBody.getProcess()); - response.status(200); - responseJson.addProperty("result", result); - responseJson.addProperty("status", "OK"); - - responseJson.addProperty("processor", "Saxon " + saxon.getVersion()); long duration = System.currentTimeMillis() - timeStart; - responseJson.addProperty("time", duration); + responseBody = new XMLResponseBody(result, "OK", saxon.getVersion(), duration); this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); } catch (Exception ex) { - responseJson = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); response.status(400); this.logger.error("Error on processing XSLT using Saxon. " + ex); } finally { - response.body(this.gson.toJson(responseJson)); + response.body(this.gson.toJson(responseBody)); } } -- 2.51.0 From e172e6c77c7c9f34b5cf5eee4f869aff523fa144 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:46:18 +0200 Subject: [PATCH 22/30] Updated Saxon version method and changed time to duration in frontend --- .../tools-services/src/main/java/com/r11/tools/xml/Saxon.java | 2 +- Frontend/assets/scripts/tools/scripts.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java index 0e1ee4b..897da0b 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java @@ -99,6 +99,6 @@ public class Saxon implements XmlEngine{ * @return version of the processor */ public String getVersion() { - return new Processor(false).getSaxonProductVersion(); + return "Saxon " + new Processor(false).getSaxonProductVersion(); } } diff --git a/Frontend/assets/scripts/tools/scripts.js b/Frontend/assets/scripts/tools/scripts.js index 911aaad..5119d50 100644 --- a/Frontend/assets/scripts/tools/scripts.js +++ b/Frontend/assets/scripts/tools/scripts.js @@ -318,7 +318,7 @@ function performRequest(endpoint, checkXML, checkTransform) { if (result.status == "OK") { - document.getElementById("procinfo").innerText += " (" + result.time + "ms)"; + document.getElementById("procinfo").innerText += " (" + result.duration + "ms)"; if (result.type) document.getElementById("procinfo").innerText += ". Returned: " + result.type; else -- 2.51.0 From 80b22893cfed3c3d92e1970ea900bb458a92b53e Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 11:50:31 +0200 Subject: [PATCH 23/30] Organized imports --- .../src/main/java/com/r11/tools/controller/XPathController.java | 1 - .../src/main/java/com/r11/tools/controller/XQueryController.java | 1 - .../src/main/java/com/r11/tools/controller/XsdController.java | 1 - .../src/main/java/com/r11/tools/controller/XsltController.java | 1 - 4 files changed, 4 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 6a75550..868d19f 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -1,7 +1,6 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; import com.r11.tools.model.XMLResponseBody; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index d5dce9f..0967457 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -1,7 +1,6 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; import com.r11.tools.model.XMLResponseBody; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 3e567bb..cc18bea 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -1,7 +1,6 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; import com.r11.tools.model.XMLResponseBody; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 76fab58..231d41d 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -1,7 +1,6 @@ package com.r11.tools.controller; import com.google.gson.Gson; -import com.google.gson.JsonObject; import com.r11.tools.controller.internal.*; import com.r11.tools.model.XMLRequestBody; import com.r11.tools.model.XMLResponseBody; -- 2.51.0 From f37e065aa120227e8c22e24b07d518bdf47391ac Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 12:06:37 +0200 Subject: [PATCH 24/30] Removed duplicate code --- .../r11/tools/controller/XPathController.java | 42 ++++--------------- .../tools/controller/XQueryController.java | 16 +++---- .../r11/tools/controller/XsdController.java | 25 ++++++----- .../r11/tools/controller/XsltController.java | 40 ++++-------------- 4 files changed, 40 insertions(+), 83 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 868d19f..07ffd47 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -31,7 +31,7 @@ public class XPathController implements RestController { } @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") - public void transform(Request request, Response response) { + public void acceptRequest(Request request, Response response) { XMLRequestBody requestBody; try { @@ -50,63 +50,39 @@ public class XPathController implements RestController { switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, requestBody); + process(response, requestBody, saxon); break; case "xalan": - processWithXalan(response, requestBody); + process(response, requestBody, xalan); break; default: response.body("saxon, xalan"); } } - private void processWithXalan(Response response, XMLRequestBody requestBody) { + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { long timeStart = System.currentTimeMillis(); XMLResponseBody responseBody = null; try { XPathQueryResult xPathQueryResult = - xalan.processXPath(requestBody.getData(), requestBody.getProcess(), ""); + engine.processXPath(requestBody.getData(), requestBody.getProcess(), ""); response.status(200); long duration = System.currentTimeMillis() - timeStart; responseBody = new XMLResponseBody(xPathQueryResult.getData().trim(), - "OK", xalan.getVersion(),duration); + "OK", engine.getVersion(),duration); responseBody.setType(xPathQueryResult.getType()); - this.logger.info("Request (XPath, Xalan) processed in " + duration + " ms."); + this.logger.info("Request (XPath, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); - this.logger.error("Error on processing XPath using Xalan. " + ex); + this.logger.error("Error on processing XPath using " + engine.getVersion() + ". " + ex); } finally { response.body(this.gson.toJson(responseBody)); } } - private void processWithSaxon(Response response, XMLRequestBody requestBody) { - XMLResponseBody responseBody = null; - long timeStart = System.currentTimeMillis(); - try { - String result = - saxon.processXPath(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()) - .getData().trim(); - - response.status(200); - - long duration = System.currentTimeMillis() - timeStart; - String processor = "Saxon " + saxon.getVersion() + " over s9api"; - responseBody = new XMLResponseBody(result, "OK", processor, duration); - - this.logger.info("Request (XPath, Saxon) processed in " + duration + " ms."); - } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); - response.status(400); - this.logger.error("Error on processing XPath using Saxon. " + ex); - } finally { - response.body(this.gson.toJson(responseBody)); - } - - } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 0967457..7446c68 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -31,7 +31,7 @@ public class XQueryController implements RestController { } @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") - public void transform(Request request, Response response) { + public void acceptRequest(Request request, Response response) { XMLRequestBody requestBody; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); @@ -45,7 +45,7 @@ public class XQueryController implements RestController { try { if (requestBody.getProcessor().equals("saxon")) - processWithSaxon(response, requestBody); + process(response, requestBody, saxon); else response.body("saxon"); } catch (Exception e) { @@ -58,23 +58,23 @@ public class XQueryController implements RestController { } - private void processWithSaxon(Response response, XMLRequestBody requestBody) { + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { - String result = saxon.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); + String result = engine.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); response.status(200); long duration = System.currentTimeMillis() - timeStart; - responseBody = new XMLResponseBody(result, "OK", saxon.getVersion(), duration); + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); - this.logger.info("Request (XQuery, Saxon) processed in " + duration + " ms."); + this.logger.info("Request (XQuery, " + engine.getVersion() + " processed in " + duration + " ms."); } catch (Exception ex) { response.status(400); - responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); - this.logger.error("Error on processing XQuery using Saxon. " + ex); + this.logger.error("Error on processing XQuery using " + engine.getVersion() + ". " + ex); } finally { response.body(this.gson.toJson(responseBody)); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index cc18bea..91ba8c5 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -27,38 +27,41 @@ public class XsdController implements RestController { return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") - public Response transform(Request request, Response response) { + public void acceptRequest(Request request, Response response) { - XMLRequestBody requestBody; + XMLRequestBody requestBody = null; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - XMLResponseBody responseJson = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); - response.body(this.gson.toJson(responseJson)); - return response; + response.body(this.gson.toJson(responseBody)); } + process(response, requestBody, xalan); + } + + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { XMLResponseBody responseBody; try { long timeStart = System.currentTimeMillis(); - String result = xalan.validate(requestBody.getData(), requestBody.getProcess()).trim(); + String result = engine.validate(requestBody.getData(), requestBody.getProcess()).trim(); response.status(200); long duration = System.currentTimeMillis() - timeStart; - responseBody = new XMLResponseBody(result, "OK", xalan.getVersion(), duration); + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); - this.logger.info("Request (XSD, Xalan) processed in " + duration + " ms."); + this.logger.info("Request (XSD, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); - this.logger.error("Error on validation against XSD using Xalan. " + ex); + this.logger.error("Error on validation against XSD using " + engine.getVersion() + ". " + ex); } response.body(this.gson.toJson(responseBody)); - return response; } + } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 231d41d..50feac4 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -29,7 +29,7 @@ public class XsltController implements RestController { return new XMLResponseBody(message, "ERR", processor, -1); } @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") - public void transform(Request request, Response response) { + public void acceptRequest(Request request, Response response) { String body = request.body(); XMLRequestBody requestBody; @@ -50,11 +50,11 @@ public class XsltController implements RestController { switch (requestBody.getProcessor()) { case "saxon": - processWithSaxon(response, requestBody); + process(response, requestBody, saxon); return; case "xalan": - processWithXalan(response, requestBody); + process(response, requestBody, xalan); return; default: @@ -62,21 +62,21 @@ public class XsltController implements RestController { } } - private void processWithXalan(Response response, XMLRequestBody requestBody) { + private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { XMLResponseBody responseBody = null; long timeStart = System.currentTimeMillis(); try { - String result = xalan.processXSLT(requestBody.getData(), requestBody.getProcess()); + String result = engine.processXSLT(requestBody.getData(), requestBody.getProcess()); response.status(200); long duration = System.currentTimeMillis() - timeStart; - responseBody = new XMLResponseBody(result, "OK", xalan.getVersion(), duration); + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); - this.logger.info("Request (XSLT, Xalan) processed in " + duration + " ms."); + this.logger.info("Request (XSLT, " + engine.getVersion() + "processed in " + duration + " ms."); } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), xalan.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); - this.logger.error("Error on processing XSLT using Xalan. " + ex); + this.logger.error("Error on processing XSLT using " + engine.getVersion() + ". " + ex); } finally { response.body(this.gson.toJson(responseBody)); @@ -84,26 +84,4 @@ public class XsltController implements RestController { } - private void processWithSaxon(Response response, XMLRequestBody requestBody) { - XMLResponseBody responseBody = null; - long timeStart = System.currentTimeMillis(); - try { - String result = saxon.processXSLT(requestBody.getData(), requestBody.getProcess()); - response.status(200); - - long duration = System.currentTimeMillis() - timeStart; - responseBody = new XMLResponseBody(result, "OK", saxon.getVersion(), duration); - this.logger.info("Request (XSLT, Saxon) processed in " + duration + " ms."); - - } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), saxon.getVersion()); - response.status(400); - - this.logger.error("Error on processing XSLT using Saxon. " + ex); - } - finally { - response.body(this.gson.toJson(responseBody)); - } - - } } -- 2.51.0 From f7301c45ad8d6922d6518a23e14f9a7bacc53d85 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 12:10:47 +0200 Subject: [PATCH 25/30] Small corrections --- .../main/java/com/r11/tools/controller/XPathController.java | 1 - .../java/com/r11/tools/controller/XQueryController.java | 2 +- .../main/java/com/r11/tools/controller/XsdController.java | 1 - .../main/java/com/r11/tools/controller/XsltController.java | 6 ++---- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 07ffd47..2d8572d 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -32,7 +32,6 @@ public class XPathController implements RestController { @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") public void acceptRequest(Request request, Response response) { - XMLRequestBody requestBody; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 7446c68..661ed37 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -69,7 +69,7 @@ public class XQueryController implements RestController { long duration = System.currentTimeMillis() - timeStart; responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); - this.logger.info("Request (XQuery, " + engine.getVersion() + " processed in " + duration + " ms."); + this.logger.info("Request (XQuery, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { response.status(400); responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 91ba8c5..6fbfb1a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -28,7 +28,6 @@ public class XsdController implements RestController { } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") public void acceptRequest(Request request, Response response) { - XMLRequestBody requestBody = null; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 50feac4..10d52a3 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -30,11 +30,9 @@ public class XsltController implements RestController { } @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") public void acceptRequest(Request request, Response response) { - String body = request.body(); - XMLRequestBody requestBody; try { - requestBody = this.gson.fromJson(body, XMLRequestBody.class); + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); @@ -72,7 +70,7 @@ public class XsltController implements RestController { long duration = System.currentTimeMillis() - timeStart; responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); - this.logger.info("Request (XSLT, " + engine.getVersion() + "processed in " + duration + " ms."); + this.logger.info("Request (XSLT, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); -- 2.51.0 From f74992ca7a4d6d76d335604781726ce5bedc6211 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 12:48:05 +0200 Subject: [PATCH 26/30] XPath now uses correct version --- .../src/main/java/com/r11/tools/controller/XPathController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index 2d8572d..f60a3d8 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -64,7 +64,7 @@ public class XPathController implements RestController { XMLResponseBody responseBody = null; try { XPathQueryResult xPathQueryResult = - engine.processXPath(requestBody.getData(), requestBody.getProcess(), ""); + engine.processXPath(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); response.status(200); long duration = System.currentTimeMillis() - timeStart; -- 2.51.0 From 8e93ab5bdbe304947a9ac71c946505e2482f7d5c Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 13:08:31 +0200 Subject: [PATCH 27/30] Added proper response when wrong engine is selected --- .../r11/tools/controller/XPathController.java | 17 ++++++++---- .../tools/controller/XQueryController.java | 11 ++++++-- .../r11/tools/controller/XsdController.java | 27 ++++++++++++++++--- .../r11/tools/controller/XsltController.java | 12 +++++++-- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java index f60a3d8..dbf3840 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XPathController.java @@ -26,24 +26,31 @@ public class XPathController implements RestController { this.xalan = xalan; } - private XMLResponseBody prepareErrorResponse(String message, String processor) { + private XMLResponseBody errorResponse(String message, String processor) { return new XMLResponseBody(message, "ERR", processor, -1); } + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + errorResponse("Valid engines are: saxon, xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xpath") public void acceptRequest(Request request, Response response) { XMLRequestBody requestBody; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = errorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseBody)); return; } if (requestBody.getProcessor() == null) { - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); return; } @@ -55,7 +62,7 @@ public class XPathController implements RestController { process(response, requestBody, xalan); break; default: - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); } } @@ -74,7 +81,7 @@ public class XPathController implements RestController { responseBody.setType(xPathQueryResult.getType()); this.logger.info("Request (XPath, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); + responseBody = errorResponse(ex.getMessage(), engine.getVersion()); response.status(400); this.logger.error("Error on processing XPath using " + engine.getVersion() + ". " + ex); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 661ed37..dc38498 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -30,6 +30,13 @@ public class XQueryController implements RestController { return new XMLResponseBody(message, "ERR", processor, -1); } + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines are: saxon", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") public void acceptRequest(Request request, Response response) { XMLRequestBody requestBody; @@ -44,10 +51,10 @@ public class XQueryController implements RestController { } try { - if (requestBody.getProcessor().equals("saxon")) + if (requestBody.getProcessor().equalsIgnoreCase("saxon")) process(response, requestBody, saxon); else - response.body("saxon"); + nonValidEngineSelectedResponse(response); } catch (Exception e) { XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "Saxon"); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java index 6fbfb1a..294c6dc 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsdController.java @@ -26,9 +26,16 @@ public class XsdController implements RestController { private XMLResponseBody prepareErrorResponse(String message, String processor) { return new XMLResponseBody(message, "ERR", processor, -1); } + + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines is: xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } @ScopedControllerManifest(method = HandlerType.POST, path = "/xsd") public void acceptRequest(Request request, Response response) { - XMLRequestBody requestBody = null; + XMLRequestBody requestBody; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { @@ -36,13 +43,22 @@ public class XsdController implements RestController { response.status(400); response.body(this.gson.toJson(responseBody)); + return; } - process(response, requestBody, xalan); + + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); + return; + } + if (requestBody.getProcessor().equalsIgnoreCase("xalan")) + process(response, requestBody, xalan); + else + nonValidEngineSelectedResponse(response); } private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { - XMLResponseBody responseBody; + XMLResponseBody responseBody = null; try { long timeStart = System.currentTimeMillis(); String result = engine.validate(requestBody.getData(), requestBody.getProcess()).trim(); @@ -59,8 +75,11 @@ public class XsdController implements RestController { this.logger.error("Error on validation against XSD using " + engine.getVersion() + ". " + ex); } + finally { + response.body(this.gson.toJson(responseBody)); + } + - response.body(this.gson.toJson(responseBody)); } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java index 10d52a3..a2b7e95 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XsltController.java @@ -28,6 +28,14 @@ public class XsltController implements RestController { private XMLResponseBody prepareErrorResponse(String message, String processor) { return new XMLResponseBody(message, "ERR", processor, -1); } + + private void nonValidEngineSelectedResponse(Response response) { + XMLResponseBody responseBody = + prepareErrorResponse("Valid engines are: saxon, xalan", "N/A"); + response.body(this.gson.toJson(responseBody)); + response.status(400); + } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt") public void acceptRequest(Request request, Response response) { XMLRequestBody requestBody; @@ -42,7 +50,7 @@ public class XsltController implements RestController { } if (requestBody.getProcessor() == null) { - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); return; } @@ -56,7 +64,7 @@ public class XsltController implements RestController { return; default: - response.body("saxon, xalan"); + nonValidEngineSelectedResponse(response); } } -- 2.51.0 From 40a8f2de34ea8e3ca7a7f30c3f43716cb7cb4271 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 13:15:50 +0200 Subject: [PATCH 28/30] Changed time to duration in libXML backend --- Backend-libXML/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Backend-libXML/main.py b/Backend-libXML/main.py index e4fefe5..9155395 100644 --- a/Backend-libXML/main.py +++ b/Backend-libXML/main.py @@ -54,7 +54,7 @@ def process_xml(request: request, type: str) -> str: code = 400 finally: exec_time = (time.time_ns() - start) / 10**6 - response_json['time'] = f"{exec_time:.03f}" + response_json['duration'] = f"{exec_time:.03f}" response_json['processor'] = "libxml2 over lxml" return json.dumps(response_json), code -- 2.51.0 From 0e0f625b6fc1cad8c4514d146798b54e9f89a277 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 13:19:14 +0200 Subject: [PATCH 29/30] Removed unneded try...catch in XQueryController.java --- .../r11/tools/controller/XQueryController.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index dc38498..72bcffe 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -49,18 +49,12 @@ public class XQueryController implements RestController { response.body(this.gson.toJson(responseBody)); return; } + + if (requestBody.getProcessor().equalsIgnoreCase("saxon")) + process(response, requestBody, saxon); + else + nonValidEngineSelectedResponse(response); - try { - if (requestBody.getProcessor().equalsIgnoreCase("saxon")) - process(response, requestBody, saxon); - else - nonValidEngineSelectedResponse(response); - } catch (Exception e) { - XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "Saxon"); - - response.status(400); - response.body(this.gson.toJson(responseBody)); - } } -- 2.51.0 From a59f554db8f8bf56d57082247ff6ccbc4d57e266 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Wed, 7 Jun 2023 13:20:26 +0200 Subject: [PATCH 30/30] Added null protection in XQueryController.java --- .../java/com/r11/tools/controller/XQueryController.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java index 72bcffe..59bec6a 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XQueryController.java @@ -49,14 +49,15 @@ public class XQueryController implements RestController { response.body(this.gson.toJson(responseBody)); return; } + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); + return; + } if (requestBody.getProcessor().equalsIgnoreCase("saxon")) process(response, requestBody, saxon); else nonValidEngineSelectedResponse(response); - - - } private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { -- 2.51.0