diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/at/gv/egiz/moazs/App2MzsService.java | 14 | ||||
| -rw-r--r-- | src/main/java/at/gv/egiz/moazs/DeliveryRequestHandler.java | 17 | ||||
| -rw-r--r-- | src/main/java/at/gv/egiz/moazs/MyMarshaller.java | 54 | ||||
| -rw-r--r-- | src/main/java/at/gv/egiz/moazs/RedisConfig.java | 64 | ||||
| -rw-r--r-- | src/main/java/at/gv/egiz/moazs/RedisRepository.java | 57 | 
5 files changed, 164 insertions, 42 deletions
| diff --git a/src/main/java/at/gv/egiz/moazs/App2MzsService.java b/src/main/java/at/gv/egiz/moazs/App2MzsService.java index 2f06f7b..f8c00fc 100644 --- a/src/main/java/at/gv/egiz/moazs/App2MzsService.java +++ b/src/main/java/at/gv/egiz/moazs/App2MzsService.java @@ -2,6 +2,8 @@ package at.gv.egiz.moazs;  import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs.App2MzsPortType;  import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service; @@ -16,6 +18,8 @@ import static java.util.concurrent.CompletableFuture.supplyAsync;  @Service  public class App2MzsService implements App2MzsPortType { +    private static final Logger logger = LoggerFactory.getLogger(App2MzsService.class); +      //TODO move timeout to config      private final int timeoutForAnwser = 10;      private final String MZSTNS = "http://reference.e-government.gv.at/namespace/zustellung/mzs/app2mzs#"; @@ -40,14 +44,16 @@ public class App2MzsService implements App2MzsPortType {          try {              return future.get(timeoutForAnwser, TimeUnit.SECONDS); - -        } catch (InterruptedException | ExecutionException e) { -            return generateErrorResponse(); -          } catch (TimeoutException e) {              future.thenAccept(appClient::sendNotification); +            logger.warn("Answer Timed Out", e);              return generatePartialSuccessResponse(deliveryRequest); + +        } catch (Exception e ) { +            logger.error("Could not deliver request.", e); +            return generateErrorResponse();          } +      }      private DeliveryResponseType generatePartialSuccessResponse(DeliveryRequestType deliveryRequest) { diff --git a/src/main/java/at/gv/egiz/moazs/DeliveryRequestHandler.java b/src/main/java/at/gv/egiz/moazs/DeliveryRequestHandler.java index c5ecdb5..16235cf 100644 --- a/src/main/java/at/gv/egiz/moazs/DeliveryRequestHandler.java +++ b/src/main/java/at/gv/egiz/moazs/DeliveryRequestHandler.java @@ -2,23 +2,36 @@ package at.gv.egiz.moazs;  import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.DeliveryRequestType;  import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.DeliveryResponseType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Component; +import javax.xml.bind.JAXBElement;  import java.util.function.Function;  @Component  public class DeliveryRequestHandler implements Function<DeliveryRequestType, DeliveryResponseType> { +    private static final Logger logger = LoggerFactory.getLogger(DeliveryRequestHandler.class); + +    @Autowired +    private RedisRepository repository;      /**       * Handles the Delivery Request       */      @Override -    public DeliveryResponseType apply(DeliveryRequestType deliveryRequestType) { +    public DeliveryResponseType apply(DeliveryRequestType deliveryRequest) { + +        var deliveryId = deliveryRequest.getMetaData().getAppDeliveryID(); +        logger.info(String.format("Received Request with AppDeliveryID = %s", deliveryId));          //check if DR is complete -        // + +        //store delivery request +        repository.add(deliveryRequest);          return null;      } diff --git a/src/main/java/at/gv/egiz/moazs/MyMarshaller.java b/src/main/java/at/gv/egiz/moazs/MyMarshaller.java index 609a3c8..ea14a0f 100644 --- a/src/main/java/at/gv/egiz/moazs/MyMarshaller.java +++ b/src/main/java/at/gv/egiz/moazs/MyMarshaller.java @@ -1,51 +1,33 @@  package at.gv.egiz.moazs;  import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.oxm.jaxb.Jaxb2Marshaller;  import org.springframework.stereotype.Component; -import javax.xml.bind.*; -import java.io.ByteArrayInputStream; +import javax.xml.transform.Result; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import java.io.InputStream;  import java.io.StringWriter; +/** + * @author xerx593 + * Source: https://stackoverflow.com/questions/44676532/how-to-use-spring-to-marshal-and-unmarshal-xml + */  @Component  public class MyMarshaller { -//    @Value("classpath:mzs/app2mzs.xsd") -//    private Resource mzsSchema; -// -//    @Value("classpath:mzs/mzs_mypersondata_en.xsd") -//    private Resource mzsPersonSchema; -// -//    @Value("classpath:zusemsg/zuse_p2.xsd") -//    private Resource msgSchema; -// -//    @Value("classpath:zusemsg/zuse_mypersondata_en_p2.xsd") -//    private Resource msgPersonSchema; - -      @Autowired -    private JAXBContext context; -     -    public byte[] toBytes(JAXBElement element) { -        try { -            Marshaller marshaller = context.createMarshaller(); -            StringWriter sw = new StringWriter(); -            marshaller.marshal(element, sw); -            return sw.toString().getBytes(); -        } catch (JAXBException e) { -            throw new RuntimeException(e); -        } -    } -     -    public JAXBElement toJAXBElement(byte[] bytes) { -        try { -            Unmarshaller unmarshaller = context.createUnmarshaller(); +    private Jaxb2Marshaller marshaller; -            var stream = new ByteArrayInputStream(bytes); -            return (JAXBElement) unmarshaller.unmarshal(stream); +    public <T> String marshallXml(final T obj) { +        StringWriter sw = new StringWriter(); +        Result result = new StreamResult(sw); +        marshaller.marshal(obj, result); +        return sw.toString(); +    } -        } catch (JAXBException e) { -            throw new RuntimeException(e); -        } +    public <T> T unmarshallXml(final InputStream xml) { +        return (T) marshaller.unmarshal(new StreamSource(xml));      }  } diff --git a/src/main/java/at/gv/egiz/moazs/RedisConfig.java b/src/main/java/at/gv/egiz/moazs/RedisConfig.java new file mode 100644 index 0000000..3487eb5 --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/RedisConfig.java @@ -0,0 +1,64 @@ +package at.gv.egiz.moazs; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericToStringSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.oxm.jaxb.Jaxb2Marshaller; + +import java.util.HashMap; + +@Configuration +@PropertySource("classpath:application.properties") +public class RedisConfig { + +    @Value("${spring.redis.host}") +    private String host; + +    @Value("${spring.redis.port}") +    private int port; + +    @Bean +    JedisConnectionFactory jedisConnectionFactory() { +        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); +        config.setHostName(host); +        config.setPort(port); +        return new JedisConnectionFactory(config); +    } + +    @Bean +    public StringRedisSerializer stringRedisSerializer() { +        return new StringRedisSerializer(); +    } + +    @Bean +    public RedisTemplate<String, Object> redisTemplate() { +        final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); +        template.setConnectionFactory(jedisConnectionFactory()); +        template.setDefaultSerializer(stringRedisSerializer()); +        return template; +    } + +    @Bean +    public Jaxb2Marshaller jaxb2Marshaller() { +        Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); +        marshaller.setClassesToBeBound( +                at.gv.e_government.reference.namespace.zustellung.mzs.persondata_.ObjectFactory.class, +                at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.ObjectFactory.class, +                at.gv.e_government.reference.namespace.zustellung.msg.phase2._20181206_.ObjectFactory.class, +                at.gv.e_government.reference.namespace.persondata.phase2._20181206_.ObjectFactory.class); //"alternatively" setContextPath(<jaxb.context>), + +        marshaller.setMarshallerProperties(new HashMap<String, Object>() {{ +            put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true); +        }}); + +        return marshaller; +    } + + +} diff --git a/src/main/java/at/gv/egiz/moazs/RedisRepository.java b/src/main/java/at/gv/egiz/moazs/RedisRepository.java new file mode 100644 index 0000000..dfc68ea --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/RedisRepository.java @@ -0,0 +1,57 @@ +package at.gv.egiz.moazs; + +import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.DeliveryRequestType; +import at.gv.e_government.reference.namespace.zustellung.mzs.app2mzs_.ObjectFactory; +import org.apache.tools.ant.filters.StringInputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import javax.xml.bind.JAXBElement; + +@Repository +public class RedisRepository { + +    private static final Logger logger = LoggerFactory.getLogger(RedisRepository.class); + +    private static final String KEY = "MZS_DELIVERY_REQUEST"; + +    private final RedisTemplate<String, Object> redisTemplate; + +    private final MyMarshaller marshaller; + +    private HashOperations<String, String, String> hashOperations; + +    private final ObjectFactory factory = new ObjectFactory(); + +    @Autowired +    public RedisRepository(RedisTemplate<String, Object> redisTemplate, MyMarshaller marshaller){ +        this.redisTemplate = redisTemplate; +        this.marshaller = marshaller; +    } + +    @PostConstruct +    private void init(){ +        hashOperations = redisTemplate.opsForHash(); +    } + +    public void add(DeliveryRequestType request) { +        var hashKey = request.getMetaData().getAppDeliveryID(); +        var serializedRequest = marshaller.marshallXml(factory.createDeliveryRequest(request)); + +        logger.info("Adding DeliveryRequest to repository: AppDeliveryId = {}, request = {}", hashKey, serializedRequest); +        hashOperations.put(KEY, hashKey, serializedRequest); + +        var drs = (String) hashOperations.get(KEY, hashKey); +        var requestFromRedis = (JAXBElement<DeliveryRequestType>) marshaller.unmarshallXml(new StringInputStream(drs)); +        String appDeliveryID = requestFromRedis.getValue().getMetaData().getAppDeliveryID(); +        logger.info("here's what i got out of redis: appDeliveryId = {}, request = {}", appDeliveryID, drs); + + +    } + +} | 
