From f26318e8ff806f845125a58ef0803a96f9f00ce0 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Wed, 3 Apr 2019 10:29:21 +0200 Subject: Init: Add Timeout to Delivery Request Handler --- src/main/java/at/gv/egiz/moazs/App2MzsService.java | 66 ++++++++++++++++++---- 1 file changed, 54 insertions(+), 12 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/at/gv/egiz/moazs/App2MzsService.java b/src/main/java/at/gv/egiz/moazs/App2MzsService.java index ccca4f5..c6a15a5 100644 --- a/src/main/java/at/gv/egiz/moazs/App2MzsService.java +++ b/src/main/java/at/gv/egiz/moazs/App2MzsService.java @@ -1,30 +1,72 @@ package at.gv.egiz.moazs; import at.gv.e_government.reference.namespace.app2mzs.App2MzsPortType; -import at.gv.e_government.reference.namespace.moazs10.app2mzs_.DeliveryRequestType; -import at.gv.e_government.reference.namespace.moazs10.app2mzs_.DeliveryResponseType; -import at.gv.e_government.reference.namespace.moazs10.app2mzs_.ObjectFactory; -import at.gv.e_government.reference.namespace.moazs10.app2mzs_.SuccessType; +import at.gv.e_government.reference.namespace.moazs10.app2mzs_.*; +import org.springframework.beans.factory.annotation.Autowired; import javax.jws.WebParam; +import java.math.BigInteger; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import static java.util.concurrent.CompletableFuture.supplyAsync; public class App2MzsService implements App2MzsPortType { + //TODO move timeout to config + private final int timeoutForAnwser = 10; + private final String MZSTNS = "http://reference.e-government.gv.at/namespace/moazs10/app2mzs#"; + + @Autowired + private DeliveryRequestHandler deliveryRequestHandler; + + @Autowired + private Mzs2AppClient appClient; + + @Autowired + private ObjectFactory objectFactory; + @Override public DeliveryResponseType app2Mzs( @WebParam(partName = "DeliveryRequest", name = "DeliveryRequest", - targetNamespace = "http://reference.e-government.gv.at/namespace/moazs10/app2mzs#") + targetNamespace = MZSTNS) DeliveryRequestType deliveryRequest) { - System.out.println("app2mzs got called"); - ObjectFactory factory = new ObjectFactory(); - DeliveryResponseType response = factory.createDeliveryResponseType(); + var future = supplyAsync(() -> deliveryRequestHandler.apply(deliveryRequest)); + + try { + return future.get(timeoutForAnwser, TimeUnit.SECONDS); + + } catch (InterruptedException | ExecutionException e) { + return generateErrorResponse(); + + } catch (TimeoutException e) { + future.thenAccept(appClient::sendNotification); + return generatePartialSuccessResponse(deliveryRequest); + } + } + + private DeliveryResponseType generatePartialSuccessResponse(DeliveryRequestType deliveryRequest) { + + var partialSuccess = objectFactory.createPartialSuccessType(); + partialSuccess.setAppDeliveryID(deliveryRequest.getMetaData().getAppDeliveryID()); + + var response = objectFactory.createDeliveryResponseType(); + response.setPartialSuccess(partialSuccess); + + return response; + } + + private DeliveryResponseType generateErrorResponse() { + + var error = objectFactory.createErrorType(); + error.setText("Error Occurred"); + error.setCode(BigInteger.valueOf(500)); - SuccessType success = factory.createSuccessType(); - success.setAppDeliveryID("12345"); - success.setMZSDeliveryID("12345"); - response.setSuccess(success); + var response = objectFactory.createDeliveryResponseType(); + response.setError(error); return response; } -- cgit v1.2.3