Added ErrorProcessor when XML returned is invalid - does not contain the record element

This commit is contained in:
Katerina 2023-09-20 14:23:37 +03:00
parent 50cb62af1e
commit ee55fd2b99
4 changed files with 70 additions and 49 deletions

View File

@ -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<ErrorMessage> handleValidationError(RuntimeException exception, WebRequest request) {
return new ResponseEntity(new ErrorMessage(exception.getMessage()), HttpStatus.BAD_REQUEST);
}
}

View File

@ -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 <record> element: " +
exchange.getIn().getBody(String.class);
validationJob.progress = "STOPPED";
validationJob.endDate = new Date();
exchange.getIn().setBody(validationJob, ValidationJob.class);
}
}

View File

@ -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)

View File

@ -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'"))