From 71e17113d1f7199bac4a27231f7e91d460444bf9 Mon Sep 17 00:00:00 2001 From: Adam Bem Date: Thu, 26 Oct 2023 09:17:40 +0200 Subject: [PATCH] Merged XPath and XQuery controllers --- .../java/com/r11/tools/SparkApplication.java | 5 +- .../r11/tools/controller/XmlController.java | 68 ++++++++++++++++--- 2 files changed, 62 insertions(+), 11 deletions(-) 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 4908e9b..d17b867 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 @@ -41,11 +41,12 @@ public class SparkApplication { RestControllerRegistry registry = new RestControllerRegistry(); registry.registerController(new ProcessorInfoController(logger, saxon, xalan)); registry.registerController(new XsdController(gson, logger, xalan)); - registry.registerController(new XPathController(gson, logger, saxon, xalan)); + registry.registerController(new XmlController(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.registerController(new XQueryController(gson, logger, saxon)); + //registry.registerController(new XPathController(gson, logger, saxon, xalan)); registry.register(); logger.info("Server is online at port: " + Spark.port()); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java index 20033fe..3ce2ade 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java @@ -1,7 +1,9 @@ package com.r11.tools.controller; import com.google.gson.Gson; +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.model.XMLRequestBody; import com.r11.tools.model.XMLResponseBody; @@ -15,7 +17,8 @@ import spark.Response; * Controller used to handle XML tools: XPath, XSD validation, XQuery and XSLT * @author Adam Bem */ -public class XmlController { +@GlobalControllerManifest +public class XmlController implements RestController { private final Gson gson; private final Logger logger; @@ -30,24 +33,24 @@ public class XmlController { this.xalan = xalan; } - private XMLResponseBody errorResponse(String message, String processor) { + private XMLResponseBody prepareErrorResponse(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"); + prepareErrorResponse("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) { + public void acceptRequestXPath(Request request, Response response) { XMLRequestBody requestBody; try { requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); } catch (Exception e) { - XMLResponseBody responseBody = errorResponse(e.getMessage(), "N/A"); + XMLResponseBody responseBody = prepareErrorResponse(e.getMessage(), "N/A"); response.status(400); response.body(this.gson.toJson(responseBody)); return; @@ -60,17 +63,17 @@ public class XmlController { switch (requestBody.getProcessor()) { case "saxon": - process(response, requestBody, saxon); + processXPath(response, requestBody, saxon); break; case "xalan": - process(response, requestBody, xalan); + processXPath(response, requestBody, xalan); break; default: nonValidEngineSelectedResponse(response); } } - private void process(Response response, XMLRequestBody requestBody, XmlEngine engine) { + private void processXPath(Response response, XMLRequestBody requestBody, XmlEngine engine) { long timeStart = System.currentTimeMillis(); XMLResponseBody responseBody = null; try { @@ -85,7 +88,7 @@ public class XmlController { responseBody.setType(xPathQueryResult.getType()); this.logger.info("Request (XPath, " + engine.getVersion() + ") processed in " + duration + " ms."); } catch (Exception ex) { - responseBody = errorResponse(ex.getMessage(), engine.getVersion()); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); response.status(400); this.logger.error("Error on processing XPath using " + engine.getVersion() + ". " + ex); @@ -95,4 +98,51 @@ public class XmlController { } + @ScopedControllerManifest(method = HandlerType.POST, path = "/xquery") + public void acceptRequestXQuery(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"); + + response.status(400); + response.body(this.gson.toJson(responseBody)); + return; + } + if (requestBody.getProcessor() == null) { + nonValidEngineSelectedResponse(response); + return; + } + + if (requestBody.getProcessor().equalsIgnoreCase("saxon")) + processXQuery(response, requestBody, saxon); + else + nonValidEngineSelectedResponse(response); + } + + private void processXQuery(Response response, XMLRequestBody requestBody, XmlEngine engine) { + XMLResponseBody responseBody = null; + long timeStart = System.currentTimeMillis(); + try { + String result = engine.executeXQuery(requestBody.getData(), requestBody.getProcess(), requestBody.getVersion()); + + response.status(200); + + long duration = System.currentTimeMillis() - timeStart; + responseBody = new XMLResponseBody(result, "OK", engine.getVersion(), duration); + + this.logger.info("Request (XQuery, " + engine.getVersion() + ") processed in " + duration + " ms."); + } catch (Exception ex) { + response.status(400); + responseBody = prepareErrorResponse(ex.getMessage(), engine.getVersion()); + + this.logger.error("Error on processing XQuery using " + engine.getVersion() + ". " + ex); + } + finally { + response.body(this.gson.toJson(responseBody)); + } + + } + }