Skip to content
Snippets Groups Projects
Commit 586675f3 authored by Jonas Blatt's avatar Jonas Blatt :ant:
Browse files

Add BAD_REQUEST (400) response, if no verifier was executed.

A parsing error of the dmn xml has the same BAD_REQUEST response.
parent c3cae130
No related branches found
No related tags found
No related merge requests found
package de.unikoblenz.fgbks.api;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
import de.unikoblenz.fgbks.core.dmn.verification.DmnVerificationService;
import de.unikoblenz.fgbks.core.dmn.verification.metrics.DmnVerificationMetricsService;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet;
......@@ -36,7 +38,7 @@ public class Verification {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.TEXT_XML)
public Response verifyAll(String payload) {
return Response.accepted(dmnVerificationService.generate(payload)).build();
return checkResult(dmnVerificationService.generate(payload));
}
/**
......@@ -64,7 +66,7 @@ public class Verification {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.TEXT_XML)
public Response verifyType(@PathParam("typeName") String typeName, String payload) {
return Response.accepted(dmnVerificationService.generateFromType(typeName, payload)).build();
return checkResult(dmnVerificationService.generateFromType(typeName, payload));
}
/**
......@@ -93,9 +95,8 @@ public class Verification {
@Consumes(MediaType.TEXT_XML)
public Response verifyClassification(
@PathParam("classificationName") String classificationName, String payload) {
return Response.accepted(
dmnVerificationService.generateFromClassification(classificationName, payload))
.build();
return checkResult(
dmnVerificationService.generateFromClassification(classificationName, payload));
}
/**
......@@ -109,4 +110,15 @@ public class Verification {
public Response metrics() {
return Response.accepted(dmnVerificationMetricsService.getMetrics()).build();
}
private Response checkResult(VerifierResultSet resultSet) {
if (resultSet.getAmountOfVerifier() == 0) {
return Response.status(
BAD_REQUEST.getStatusCode(),
"The dmn syntax is not correct. The dmn can not be parsed.")
.build();
} else {
return Response.accepted(resultSet).build();
}
}
}
......@@ -4,6 +4,7 @@ import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnDefinition;
import de.unikoblenz.fgbks.core.dmn.domain.vdmn.parser.SimpleVDmnParser;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Optional;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
......@@ -14,8 +15,8 @@ import org.camunda.bpm.model.dmn.impl.DmnParser;
/**
* Application scoped service, which creates a {@link DmnObjectContainer} with the method {@link
* DmnService#getDmnServiceFromXml(String)}. This container contained the different model types of a
* dmn table.
* DmnService#getDmnObjectContainerFromXml(String)}. This container contained the different model
* types of a dmn table.
*/
@ApplicationScoped
public class DmnService {
......@@ -23,20 +24,25 @@ public class DmnService {
@Inject SimpleVDmnParser simpleDmnParser;
/**
* Get the {@link DmnObjectContainer} with the given xml string of a dmn table.
* Get an optional of {@link DmnObjectContainer} from the given xml string of a dmn table. The
* optional is empty, if the dmn xml can not be parsed.
*
* @param dmnXmlString the xml of a dmn table
* @return a new {@link DmnObjectContainer}
* @return a optional of a new {@link DmnObjectContainer}
*/
public DmnObjectContainer getDmnServiceFromXml(String dmnXmlString) {
List<DmnDecision> dmnDecisions =
DmnEngineConfiguration.createDefaultDmnEngineConfiguration()
.buildEngine()
.parseDecisions(IOUtils.toInputStream(dmnXmlString, Charset.defaultCharset()));
DmnModelInstance dmnModel =
new DmnParser()
.parseModelFromStream(IOUtils.toInputStream(dmnXmlString, Charset.defaultCharset()));
VDmnDefinition vDmnDefinition = simpleDmnParser.getVDmnDefinition(dmnModel);
return new DmnObjectContainer(dmnDecisions, dmnModel, vDmnDefinition);
public Optional<DmnObjectContainer> getDmnObjectContainerFromXml(String dmnXmlString) {
try {
List<DmnDecision> dmnDecisions =
DmnEngineConfiguration.createDefaultDmnEngineConfiguration()
.buildEngine()
.parseDecisions(IOUtils.toInputStream(dmnXmlString, Charset.defaultCharset()));
DmnModelInstance dmnModel =
new DmnParser()
.parseModelFromStream(IOUtils.toInputStream(dmnXmlString, Charset.defaultCharset()));
VDmnDefinition vDmnDefinition = simpleDmnParser.getVDmnDefinition(dmnModel);
return Optional.of(new DmnObjectContainer(dmnDecisions, dmnModel, vDmnDefinition));
} catch (Exception e) {
return Optional.empty();
}
}
}
package de.unikoblenz.fgbks.core.dmn.verification;
import de.unikoblenz.fgbks.base.utils.UniqueIdGenerator;
import de.unikoblenz.fgbks.core.dmn.utils.DmnObjectContainer;
import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
import de.unikoblenz.fgbks.core.dmn.verification.metrics.DmnVerificationMetricsService;
import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult;
......@@ -20,6 +21,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
......@@ -170,13 +172,19 @@ public class DmnVerificationService {
String dmnXml, long verificationProcessId) {
Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> map =
new ConcurrentHashMap<>();
map.put(
DefaultConfiguration.class,
DefaultConfiguration.getBuilder()
.withVerificationProcessId(verificationProcessId)
.withDmnObjectContainer(dmnService.getDmnServiceFromXml(dmnXml))
.build());
return map;
Optional<DmnObjectContainer> dmnObjectContainerFromXml =
dmnService.getDmnObjectContainerFromXml(dmnXml);
if (!dmnObjectContainerFromXml.isPresent()) {
throw new IllegalArgumentException("Dmn table can not be parsed.");
} else {
map.put(
DefaultConfiguration.class,
DefaultConfiguration.getBuilder()
.withVerificationProcessId(verificationProcessId)
.withDmnObjectContainer(dmnObjectContainerFromXml.get())
.build());
return map;
}
}
private VerifierResultSet generateWithFilter(
......@@ -186,9 +194,14 @@ public class DmnVerificationService {
LOGGER.info("Parsing dmn. Id: " + verificationProcessId);
Validate.notNull(dmnXml);
LOGGER.debug(dmnXml);
Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> configs =
getConfigs(dmnXml, verificationProcessId);
Builder resultBuilder = VerifierResultSet.getBuilder();
Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> configs;
try {
configs = getConfigs(dmnXml, verificationProcessId);
} catch (IllegalArgumentException e) {
LOGGER.warn("Parsing dmn failed. Id: " + verificationProcessId);
return resultBuilder.build();
}
LOGGER.info("Looking for verifiers. Id: " + verificationProcessId);
List<Future<VerifierResult>> results = new ArrayList<>(verifierClasses.size());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment