Skip to content
This repository was archived by the owner on Sep 15, 2023. It is now read-only.

Commit 8013f8c

Browse files
committed
add some error handling
1 parent 786061e commit 8013f8c

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

ch-covidcertificate-backend-transformation/ch-covidcertificate-backend-transformation-ws/src/main/java/ch/admin/bag/covidcertificate/backend/transformation/ws/client/VerificationCheckClient.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import ch.admin.bag.covidcertificate.backend.transformation.model.HCertPayload;
44
import ch.admin.bag.covidcertificate.backend.transformation.model.VerificationResponse;
5+
import ch.admin.bag.covidcertificate.backend.transformation.ws.client.exceptions.ResponseParseError;
56
import ch.admin.bag.covidcertificate.backend.transformation.ws.client.exceptions.ValidationException;
67
import ch.admin.bag.covidcertificate.sdk.core.models.healthcert.DccHolder;
78
import ch.admin.bag.covidcertificate.sdk.core.models.state.CheckSignatureState;
9+
10+
import com.fasterxml.jackson.core.JsonProcessingException;
811
import com.fasterxml.jackson.databind.DeserializationFeature;
912
import com.fasterxml.jackson.databind.ObjectMapper;
13+
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
1014
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
1115
import com.fasterxml.jackson.module.kotlin.KotlinModule;
1216
import java.io.IOException;
@@ -41,7 +45,7 @@ public VerificationCheckClient(String baseurl, String verifyEndpoint) {
4145
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
4246
}
4347

44-
private VerificationResponse verify(HCertPayload hCertPayload) throws InterruptedException {
48+
private VerificationResponse verify(HCertPayload hCertPayload) throws InterruptedException, ResponseParseError {
4549
final String hCert;
4650
try {
4751
hCert = objectMapper.writeValueAsString(hCertPayload);
@@ -58,7 +62,11 @@ private VerificationResponse verify(HCertPayload hCertPayload) throws Interrupte
5862
response.body());
5963
return null;
6064
}
61-
return objectMapper.readValue(response.body(), VerificationResponse.class);
65+
try {
66+
return objectMapper.readValue(response.body(), VerificationResponse.class);
67+
} catch(InvalidDefinitionException ex) {
68+
throw new ResponseParseError(objectMapper.readTree(response.body()));
69+
}
6270
} catch (URISyntaxException | IOException e) {
6371
logger.error("Couldn't verify certificate", e);
6472
return null;
@@ -74,8 +82,9 @@ private VerificationResponse verify(HCertPayload hCertPayload) throws Interrupte
7482
* @param hCertPayload payload as sent with the original request
7583
* @return the decoded certificate if it decodeable and valid, null otherwise
7684
* @throws ValidationException
85+
* @throws ResponseParseError
7786
*/
78-
public VerificationResponse validate(HCertPayload hCertPayload) throws InterruptedException, ValidationException {
87+
public VerificationResponse validate(HCertPayload hCertPayload) throws InterruptedException, ValidationException, ResponseParseError {
7988
final var verificationResponse = verify(hCertPayload);
8089
if (verificationResponse != null && verificationResponse.getSuccessState() != null) {
8190
return verificationResponse;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2021 Patrick Amrein <amrein@ubique.ch>
2+
//
3+
// This software is released under the MIT License.
4+
// https://opensource.org/licenses/MIT
5+
6+
package ch.admin.bag.covidcertificate.backend.transformation.ws.client.exceptions;
7+
8+
import com.fasterxml.jackson.databind.JsonNode;
9+
10+
public class ResponseParseError extends Exception {
11+
private final JsonNode state;
12+
public ResponseParseError(JsonNode state) {
13+
this.state = state;
14+
}
15+
16+
public String getState() {
17+
return state.toPrettyString();
18+
}
19+
}

ch-covidcertificate-backend-transformation/ch-covidcertificate-backend-transformation-ws/src/main/java/ch/admin/bag/covidcertificate/backend/transformation/ws/controller/TransformationController.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import ch.admin.bag.covidcertificate.backend.transformation.model.Person;
1717
import ch.admin.bag.covidcertificate.backend.transformation.model.TransformPayload;
1818
import ch.admin.bag.covidcertificate.backend.transformation.ws.client.VerificationCheckClient;
19+
import ch.admin.bag.covidcertificate.backend.transformation.ws.client.exceptions.ResponseParseError;
1920
import ch.admin.bag.covidcertificate.backend.transformation.ws.client.exceptions.ValidationException;
2021
import ch.admin.bag.covidcertificate.backend.transformation.ws.util.MockHelper;
2122
import ch.admin.bag.covidcertificate.backend.transformation.ws.util.OauthWebClient;
@@ -88,7 +89,7 @@ public TransformationController(
8889
@PostMapping(path = "/certificateLight")
8990
public @ResponseBody ResponseEntity<CertLightPayload> getCertLight(
9091
@Valid @RequestBody HCertPayload hCertPayload)
91-
throws IOException, InterruptedException, ValidationException {
92+
throws IOException, InterruptedException, ValidationException, ResponseParseError {
9293
// Decode and verify hcert
9394
final var validationResponse = verificationCheckClient.validate(hCertPayload);
9495
final var dccHolder = validationResponse.getHcertDecoded();
@@ -159,4 +160,11 @@ public ResponseEntity<Object> validationFailed(ValidationException e) {
159160
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getState());
160161
}
161162

163+
@ExceptionHandler(ResponseParseError.class)
164+
@ResponseStatus(HttpStatus.BAD_REQUEST)
165+
public ResponseEntity<Object> validationParseFailed(ResponseParseError e) {
166+
logger.error("Validation failed: {}", e.getState());
167+
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getState());
168+
}
169+
162170
}

0 commit comments

Comments
 (0)