From 5e6304ee003285793c0992a81e424969a2a6af88 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Wed, 15 May 2019 15:44:44 +0200 Subject: Move Services / Clients To Dedicated Packages --- src/main/java/at/gv/egiz/moazs/App2MzsService.java | 99 -------------------- src/main/java/at/gv/egiz/moazs/MoaZS.java | 13 +++ src/main/java/at/gv/egiz/moazs/Mzs2AppClient.java | 13 --- src/main/java/at/gv/egiz/moazs/MzsApp.java | 13 --- .../gv/egiz/moazs/config/App2MzsServiceConfig.java | 30 ------- .../at/gv/egiz/moazs/config/MzsServiceConfig.java | 30 +++++++ src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java | 13 +++ src/main/java/at/gv/egiz/moazs/mzs/MzsService.java | 100 +++++++++++++++++++++ 8 files changed, 156 insertions(+), 155 deletions(-) delete mode 100644 src/main/java/at/gv/egiz/moazs/App2MzsService.java create mode 100644 src/main/java/at/gv/egiz/moazs/MoaZS.java delete mode 100644 src/main/java/at/gv/egiz/moazs/Mzs2AppClient.java delete mode 100644 src/main/java/at/gv/egiz/moazs/MzsApp.java delete mode 100644 src/main/java/at/gv/egiz/moazs/config/App2MzsServiceConfig.java create mode 100644 src/main/java/at/gv/egiz/moazs/config/MzsServiceConfig.java create mode 100644 src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java create mode 100644 src/main/java/at/gv/egiz/moazs/mzs/MzsService.java (limited to 'src/main') diff --git a/src/main/java/at/gv/egiz/moazs/App2MzsService.java b/src/main/java/at/gv/egiz/moazs/App2MzsService.java deleted file mode 100644 index 19eb856..0000000 --- a/src/main/java/at/gv/egiz/moazs/App2MzsService.java +++ /dev/null @@ -1,99 +0,0 @@ -package at.gv.egiz.moazs; - -import at.gv.egiz.moazs.pipeline.DeliveryPipeline; -import at.gv.egiz.moazs.preprocess.DeliveryRequestAugmenter; -import at.gv.egiz.moazs.repository.DeliveryRepository; -import at.gv.zustellung.app2mzs.xsd.App2MzsPortType; -import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; -import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; -import org.apache.cxf.annotations.SchemaValidation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.jws.WebParam; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import static at.gv.egiz.moazs.MoaZSException.moaZSException; -import static at.gv.zustellung.msg.xsd.DeliveryAnswerType.deliveryAnswerTypeBuilder; -import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; -import static java.lang.String.format; -import static java.util.concurrent.CompletableFuture.supplyAsync; - -//todo : validate Schema in both directions. -@Service -@SchemaValidation(type = SchemaValidation.SchemaValidationType.IN) -public class App2MzsService implements App2MzsPortType { - - private static final Logger logger = LoggerFactory.getLogger(App2MzsService.class); - - //TODO move timeout and namespaces to config - private static final int TIMEOUT_FOR_ANWSER = 10; - - private final DeliveryRepository repository; - private final DeliveryPipeline pipeline; - private final Mzs2AppClient appClient; - private final DeliveryRequestAugmenter augmenter; - - @Autowired - public App2MzsService(DeliveryRepository repository, DeliveryPipeline pipeline, Mzs2AppClient appClient, - DeliveryRequestAugmenter augmenter) { - this.repository = repository; - this.pipeline = pipeline; - this.appClient = appClient; - this.augmenter = augmenter; - } - - @Override - public DeliveryRequestStatusType app2Mzs( - @WebParam(partName = "DeliveryRequest", - name = "DeliveryRequest") - DeliveryRequestType deliveryRequest) { - - var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID(); - - var future = supplyAsync(() -> augmenter.augment(deliveryRequest)) - .thenApply(this::process); - - try { - return future.get(TIMEOUT_FOR_ANWSER, TimeUnit.SECONDS); - } catch (TimeoutException e) { - future.thenAccept(appClient::sendNotification); - logger.info("Answer Timed Out", e); - return generatePartialSuccessResponse(appDeliveryID); - - } catch (Exception e ) { - var message = format("An error occurred while processing DeliveryRequest with AppDeliveryID=%s. ", appDeliveryID); - throw new MoaZSException(message, e); - - } - - } - - private DeliveryRequestStatusType process(DeliveryRequestType deliveryRequest) { - - var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID(); - logger.info("Receive request with appDeliveryID = {}.", appDeliveryID); - - repository.add(deliveryRequest); - pipeline.processRequest(appDeliveryID); - - return repository.getDeliveryRequestStatus(appDeliveryID) - .orElseThrow(() -> moaZSException("Could not get a response for AppDeliveryID=%s.", appDeliveryID)); - - } - - private DeliveryRequestStatusType generatePartialSuccessResponse(String appDeliveryId) { - - var answer = deliveryAnswerTypeBuilder() - .withAppDeliveryID(appDeliveryId) - .build(); - - return deliveryRequestStatusTypeBuilder() - .withPartialSuccess(answer) - .build(); - } - -} diff --git a/src/main/java/at/gv/egiz/moazs/MoaZS.java b/src/main/java/at/gv/egiz/moazs/MoaZS.java new file mode 100644 index 0000000..3009745 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/MoaZS.java @@ -0,0 +1,13 @@ +package at.gv.egiz.moazs; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class MoaZS { + + public static void main(String[] args) { + SpringApplication.run(MoaZS.class, args); + } +} diff --git a/src/main/java/at/gv/egiz/moazs/Mzs2AppClient.java b/src/main/java/at/gv/egiz/moazs/Mzs2AppClient.java deleted file mode 100644 index a7a52bf..0000000 --- a/src/main/java/at/gv/egiz/moazs/Mzs2AppClient.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.gv.egiz.moazs; - -import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; -import org.springframework.stereotype.Component; - -@Component -public class Mzs2AppClient { - - public void sendNotification(DeliveryRequestStatusType status) { - throw new UnsupportedOperationException("Not implemented."); - } - -} diff --git a/src/main/java/at/gv/egiz/moazs/MzsApp.java b/src/main/java/at/gv/egiz/moazs/MzsApp.java deleted file mode 100644 index 6b4e34b..0000000 --- a/src/main/java/at/gv/egiz/moazs/MzsApp.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.gv.egiz.moazs; - - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class MzsApp { - - public static void main(String[] args) { - SpringApplication.run(MzsApp.class, args); - } -} diff --git a/src/main/java/at/gv/egiz/moazs/config/App2MzsServiceConfig.java b/src/main/java/at/gv/egiz/moazs/config/App2MzsServiceConfig.java deleted file mode 100644 index 9bf03fb..0000000 --- a/src/main/java/at/gv/egiz/moazs/config/App2MzsServiceConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.gv.egiz.moazs.config; - -import at.gv.egiz.moazs.App2MzsService; -import at.gv.zustellung.app2mzs.xsd.App2Mzs; -import org.apache.cxf.Bus; -import org.apache.cxf.jaxws.EndpointImpl; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.xml.ws.Endpoint; - -@Configuration -public class App2MzsServiceConfig { - - @Bean - @Autowired - public Endpoint endpoint(Bus bus, App2MzsService app2mzsService, App2Mzs app2mzs) { - EndpointImpl endpoint = new EndpointImpl(bus, app2mzsService); - endpoint.setAddress("/"); - endpoint.setServiceName(app2mzs.getServiceName()); - endpoint.setWsdlLocation(app2mzs.getWSDLDocumentLocation().toString()); - endpoint.publish(); - return endpoint; - } - - @Bean public App2Mzs app2mzs() { - return new App2Mzs(); - } -} diff --git a/src/main/java/at/gv/egiz/moazs/config/MzsServiceConfig.java b/src/main/java/at/gv/egiz/moazs/config/MzsServiceConfig.java new file mode 100644 index 0000000..713c616 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/config/MzsServiceConfig.java @@ -0,0 +1,30 @@ +package at.gv.egiz.moazs.config; + +import at.gv.egiz.moazs.mzs.MzsService; +import at.gv.zustellung.app2mzs.xsd.App2Mzs; +import org.apache.cxf.Bus; +import org.apache.cxf.jaxws.EndpointImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.xml.ws.Endpoint; + +@Configuration +public class MzsServiceConfig { + + @Bean + @Autowired + public Endpoint endpoint(Bus bus, MzsService mzsService, App2Mzs app2mzs) { + EndpointImpl endpoint = new EndpointImpl(bus, mzsService); + endpoint.setAddress("/"); + endpoint.setServiceName(app2mzs.getServiceName()); + endpoint.setWsdlLocation(app2mzs.getWSDLDocumentLocation().toString()); + endpoint.publish(); + return endpoint; + } + + @Bean public App2Mzs app2mzs() { + return new App2Mzs(); + } +} diff --git a/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java b/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java new file mode 100644 index 0000000..5785703 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/mzs/MzsClient.java @@ -0,0 +1,13 @@ +package at.gv.egiz.moazs.mzs; + +import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; +import org.springframework.stereotype.Component; + +@Component +public class MzsClient { + + public void sendNotification(DeliveryRequestStatusType status) { + throw new UnsupportedOperationException("Not implemented."); + } + +} diff --git a/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java b/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java new file mode 100644 index 0000000..774f7f4 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/mzs/MzsService.java @@ -0,0 +1,100 @@ +package at.gv.egiz.moazs.mzs; + +import at.gv.egiz.moazs.MoaZSException; +import at.gv.egiz.moazs.pipeline.DeliveryPipeline; +import at.gv.egiz.moazs.preprocess.DeliveryRequestAugmenter; +import at.gv.egiz.moazs.repository.DeliveryRepository; +import at.gv.zustellung.app2mzs.xsd.App2MzsPortType; +import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType; +import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; +import org.apache.cxf.annotations.SchemaValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.jws.WebParam; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import static at.gv.egiz.moazs.MoaZSException.moaZSException; +import static at.gv.zustellung.msg.xsd.DeliveryAnswerType.deliveryAnswerTypeBuilder; +import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder; +import static java.lang.String.format; +import static java.util.concurrent.CompletableFuture.supplyAsync; + +//todo : validate Schema in both directions. +@Service +@SchemaValidation(type = SchemaValidation.SchemaValidationType.IN) +public class MzsService implements App2MzsPortType { + + private static final Logger logger = LoggerFactory.getLogger(MzsService.class); + + //TODO move timeout and namespaces to config + private static final int TIMEOUT_FOR_ANWSER = 10; + + private final DeliveryRepository repository; + private final DeliveryPipeline pipeline; + private final MzsClient appClient; + private final DeliveryRequestAugmenter augmenter; + + @Autowired + public MzsService(DeliveryRepository repository, DeliveryPipeline pipeline, MzsClient appClient, + DeliveryRequestAugmenter augmenter) { + this.repository = repository; + this.pipeline = pipeline; + this.appClient = appClient; + this.augmenter = augmenter; + } + + @Override + public DeliveryRequestStatusType app2Mzs( + @WebParam(partName = "DeliveryRequest", + name = "DeliveryRequest") + DeliveryRequestType deliveryRequest) { + + var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID(); + + var future = supplyAsync(() -> augmenter.augment(deliveryRequest)) + .thenApply(this::process); + + try { + return future.get(TIMEOUT_FOR_ANWSER, TimeUnit.SECONDS); + } catch (TimeoutException e) { + future.thenAccept(appClient::sendNotification); + logger.info("Answer Timed Out", e); + return generatePartialSuccessResponse(appDeliveryID); + + } catch (Exception e ) { + var message = format("An error occurred while processing DeliveryRequest with AppDeliveryID=%s.", appDeliveryID); + throw new MoaZSException(message, e); + + } + + } + + private DeliveryRequestStatusType process(DeliveryRequestType deliveryRequest) { + + var appDeliveryID = deliveryRequest.getMetaData().getAppDeliveryID(); + logger.info("Receive request with appDeliveryID = {}.", appDeliveryID); + + repository.add(deliveryRequest); + pipeline.processRequest(appDeliveryID); + + return repository.getDeliveryRequestStatus(appDeliveryID) + .orElseThrow(() -> moaZSException("Could not get a response for AppDeliveryID=%s.", appDeliveryID)); + + } + + private DeliveryRequestStatusType generatePartialSuccessResponse(String appDeliveryId) { + + var answer = deliveryAnswerTypeBuilder() + .withAppDeliveryID(appDeliveryId) + .build(); + + return deliveryRequestStatusTypeBuilder() + .withPartialSuccess(answer) + .build(); + } + +} -- cgit v1.2.3