From ee55fd2b99e4006a00b9c4ff6164ff79aab0e120 Mon Sep 17 00:00:00 2001 From: Katerina Date: Wed, 20 Sep 2023 14:23:37 +0300 Subject: [PATCH] Added ErrorProcessor when XML returned is invalid - does not contain the record element --- .../exceptions/ExceptionHandler.java | 18 ------- .../processors/ErrorProcessor.java | 28 ++++++++++ .../validatorapi/routes/FairOaiPmhRoute2.java | 54 ++++++++++--------- .../routes/SimpleOaiPmhRoute.java | 19 ++++--- 4 files changed, 70 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/eu/dnetlib/validatorapi/exceptions/ExceptionHandler.java create mode 100644 src/main/java/eu/dnetlib/validatorapi/processors/ErrorProcessor.java diff --git a/src/main/java/eu/dnetlib/validatorapi/exceptions/ExceptionHandler.java b/src/main/java/eu/dnetlib/validatorapi/exceptions/ExceptionHandler.java deleted file mode 100644 index 9438409..0000000 --- a/src/main/java/eu/dnetlib/validatorapi/exceptions/ExceptionHandler.java +++ /dev/null @@ -1,18 +0,0 @@ -package eu.dnetlib.validatorapi.exceptions; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class ExceptionHandler extends ResponseEntityExceptionHandler { - - @ResponseBody - @org.springframework.web.bind.annotation.ExceptionHandler(value = {ValidationException.class}) - protected ResponseEntity handleValidationError(RuntimeException exception, WebRequest request) { - return new ResponseEntity(new ErrorMessage(exception.getMessage()), HttpStatus.BAD_REQUEST); - } -} diff --git a/src/main/java/eu/dnetlib/validatorapi/processors/ErrorProcessor.java b/src/main/java/eu/dnetlib/validatorapi/processors/ErrorProcessor.java new file mode 100644 index 0000000..600b870 --- /dev/null +++ b/src/main/java/eu/dnetlib/validatorapi/processors/ErrorProcessor.java @@ -0,0 +1,28 @@ +package eu.dnetlib.validatorapi.processors; + +import eu.dnetlib.validatorapi.entities.ValidationJob; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; + +import java.util.Date; + +public class ErrorProcessor implements Processor { + + ValidationJob validationJob; + + public ErrorProcessor(ValidationJob validationJob) { + this.validationJob = validationJob; + } + + @Override + public void process(Exchange exchange) { + validationJob.exceptionMessage = "OAI-PMH Response is not valid. XML does not contain element: " + + exchange.getIn().getBody(String.class); + + validationJob.progress = "STOPPED"; + validationJob.endDate = new Date(); + + exchange.getIn().setBody(validationJob, ValidationJob.class); + } + +} diff --git a/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java b/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java index ff2a28e..70bb608 100644 --- a/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java +++ b/src/main/java/eu/dnetlib/validatorapi/routes/FairOaiPmhRoute2.java @@ -6,6 +6,7 @@ import eu.dnetlib.validatorapi.entities.ValidationIssue; import eu.dnetlib.validatorapi.entities.ValidationJob; import eu.dnetlib.validatorapi.entities.ValidationRuleResult; import eu.dnetlib.validatorapi.processors.DataBaseProcessor; +import eu.dnetlib.validatorapi.processors.ErrorProcessor; import eu.dnetlib.validatorapi.processors.ExceptionProcessor; import eu.dnetlib.validatorapi.processors.XmlProcessor; import org.apache.camel.Exchange; @@ -61,34 +62,39 @@ public class FairOaiPmhRoute2 extends RouteBuilder { .end(); from(oaiEndpoint) - .multicast().parallelProcessing() - .to("direct:guidelinesProcessor") - .to("direct:fairProcessor") + .choice() + .when(xpath("//*[local-name()='record']")) + .multicast().parallelProcessing() + .to("direct:guidelinesProcessor") + .to("direct:fairProcessor") + .endChoice() + .otherwise() + .process(new ErrorProcessor(validationJob)) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") .end(); from("direct:guidelinesProcessor") .routeId(routeid) - .split(xpath("//*[local-name()='record']")) - .process(new XmlProcessor(profile, validationJob, maxNumberOfRecords)) - .choice() - .when(simple("${body[results]} && ${header.MyHeader} != 'stop'")) - .split(simple("${body[results]}")) - .to("jpa:" + ValidationRuleResult.class.getName() + "?usePersist=true") - .endChoice() - .end() - .choice() - .when(simple("${body[issues]} && ${header.MyHeader} != 'stop'")) - .split(simple("${body[issues]}")) - .to("jpa:"+ ValidationIssue.class.getName()+ "?usePersist=true") - .endChoice() - .end() - .choice() - .when(header("MyHeader").isEqualTo("stop")) - .process(new DataBaseProcessor()) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase") - .to("controlbus:route?routeId="+routeid+"&action=stop") - .endChoice() - .end(); + .process(new XmlProcessor(profile, validationJob, maxNumberOfRecords)) + .choice() + .when(simple("${body[results]} && ${header.MyHeader} != 'stop'")) + .split(simple("${body[results]}")) + .to("jpa:" + ValidationRuleResult.class.getName() + "?usePersist=true") + .endChoice() + .end() + .choice() + .when(simple("${body[issues]} && ${header.MyHeader} != 'stop'")) + .split(simple("${body[issues]}")) + .to("jpa:"+ ValidationIssue.class.getName()+ "?usePersist=true") + .endChoice() + .end() + .choice() + .when(header("MyHeader").isEqualTo("stop")) + .process(new DataBaseProcessor()) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true")//;.to("direct:saveToDatabase") + .to("controlbus:route?routeId="+routeid+"&action=stop") + .endChoice() + .end(); from("direct:fairProcessor") .routeId(routeid2) diff --git a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java index 114a8dc..999503d 100644 --- a/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java +++ b/src/main/java/eu/dnetlib/validatorapi/routes/SimpleOaiPmhRoute.java @@ -5,6 +5,7 @@ import eu.dnetlib.validatorapi.entities.ValidationIssue; import eu.dnetlib.validatorapi.entities.ValidationJob; import eu.dnetlib.validatorapi.entities.ValidationRuleResult; import eu.dnetlib.validatorapi.processors.DataBaseProcessor; +import eu.dnetlib.validatorapi.processors.ErrorProcessor; import eu.dnetlib.validatorapi.processors.ExceptionProcessor; import eu.dnetlib.validatorapi.processors.XmlProcessor; import org.apache.camel.Exchange; @@ -56,16 +57,20 @@ public class SimpleOaiPmhRoute extends RouteBuilder { .handled(true) .end(); -/* - .process(new TypeConversionExceptionProcessor(validationJob)).log("\n\n\n\n HERE 2") - .process(new DataBaseProcessor())//.maximumRedeliveries(0) - .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true").log("\n\n\n\nHEREEEEEE") - .stop(); -*/ from(oaiEndpoint) .routeId(routeid) + .choice() + .when(xpath("//*[local-name()='record']")) + .multicast().parallelProcessing() + .to("direct:oaipmhProcessor") + .endChoice() + .otherwise() + .process(new ErrorProcessor(validationJob)) + .to("jpa:" + ValidationJob.class.getName() + "?useExecuteUpdate=true") + .end(); + + from("direct:oaiPmhProcessor") .split(xpath("//*[local-name()='record']")) - .doTry() .process(new XmlProcessor(profile, validationJob, maxNumberOfRecords)) .choice() .when(simple("${body[results]} && ${header.MyHeader} != 'stop'"))