aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/msg
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/msg')
-rw-r--r--src/main/java/at/gv/egiz/moazs/msg/MsgClient.java43
-rw-r--r--src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java10
-rw-r--r--src/main/java/at/gv/egiz/moazs/msg/StoreSOAPBodyBinaryInRepositoryInterceptor.java55
3 files changed, 77 insertions, 31 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/msg/MsgClient.java b/src/main/java/at/gv/egiz/moazs/msg/MsgClient.java
index 6f0b1d9..fd36a92 100644
--- a/src/main/java/at/gv/egiz/moazs/msg/MsgClient.java
+++ b/src/main/java/at/gv/egiz/moazs/msg/MsgClient.java
@@ -6,6 +6,8 @@ import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType;
import at.gv.zustellung.msg.xsd.DeliveryRequestType;
import org.apache.cxf.jaxws.JaxWsClientFactoryBean;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -15,53 +17,34 @@ public class MsgClient {
private final DeliveryRequestType msgRequest;
private final ConfigType config;
+ private final PhaseInterceptor<? extends Message> interceptor;
- MsgClient(DeliveryRequestType msgRequest, ConfigType config) {
+ MsgClient(DeliveryRequestType msgRequest, ConfigType config, PhaseInterceptor<? extends Message> interceptor) {
this.msgRequest = msgRequest;
this.config = config;
+ this.interceptor = interceptor;
}
+ /**
+ * Send {@code msgRequest} to {@code Config/Server/ZUSEUrlID} and run {@code interceptor} on response.
+ * @return
+ */
public DeliveryRequestStatusType send() {
-
var proxy = connect(config);
-
return proxy.delivery(msgRequest);
-
}
private App2ZusePort connect(ConfigType config) {
- new JaxWsClientFactoryBean();
-
var address = config.getServer().getZUSEUrlID();
- var factory = new JaxWsProxyFactoryBean();
+
+ var factory = new JaxWsClientFactoryBean();
factory.setServiceClass(App2ZusePort.class);
factory.setAddress(address);
+ factory.getInInterceptors().add(interceptor);
- var proxy = factory.create();
-
-// var client = ClientProxy.getClient(proxy);
-// var conduit = (HTTPConduit) client.getConduit();
-//
-// if (addressIsHttps(address)) {
-// var tlsParams = new TLSClientParameters();
-// tlsParams.setSSLSocketFactory(createSSLContext().getSocketFactory());
-// conduit.setTlsClientParameters(tlsParams);
-// }
+ var proxy = new JaxWsProxyFactoryBean(factory).create();
return (App2ZusePort) proxy;
}
-
-// private SSLContext createSSLContext() {
-// java.util.Properties props = new Properties();
-// props.entrySet();
-//
-// // return SSLUtils.getPropertiesSSLContext(this.props, this.configDir, this.propsPrefix, forceTrustAllManager);
-// return null;
-// }
-
- private boolean addressIsHttps(String address) {
- return address.startsWith("https://");
- }
-
}
diff --git a/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java b/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java
index 9884bd5..82468bc 100644
--- a/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java
+++ b/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java
@@ -2,13 +2,21 @@ package at.gv.egiz.moazs.msg;
import at.gv.zustellung.app2mzs.xsd.ConfigType;
import at.gv.zustellung.msg.xsd.DeliveryRequestType;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MsgClientFactory {
+ private final StoreSOAPBodyBinaryInRepositoryInterceptor storeResponseInterceptor;
+
+ @Autowired
+ public MsgClientFactory(StoreSOAPBodyBinaryInRepositoryInterceptor storeResponseInterceptor) {
+ this.storeResponseInterceptor = storeResponseInterceptor;
+ }
+
public MsgClient create(DeliveryRequestType msgRequest, ConfigType config) {
- return new MsgClient(msgRequest, config);
+ return new MsgClient(msgRequest, config, storeResponseInterceptor);
}
}
diff --git a/src/main/java/at/gv/egiz/moazs/msg/StoreSOAPBodyBinaryInRepositoryInterceptor.java b/src/main/java/at/gv/egiz/moazs/msg/StoreSOAPBodyBinaryInRepositoryInterceptor.java
new file mode 100644
index 0000000..4e023ac
--- /dev/null
+++ b/src/main/java/at/gv/egiz/moazs/msg/StoreSOAPBodyBinaryInRepositoryInterceptor.java
@@ -0,0 +1,55 @@
+package at.gv.egiz.moazs.msg;
+
+import at.gv.egiz.moazs.MoaZSException;
+import at.gv.egiz.moazs.repository.DeliveryRepository;
+import at.gv.egiz.moazs.scheme.SOAPUtils;
+import at.gv.egiz.moazs.util.CXFMessageUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+
+@Component
+public class StoreSOAPBodyBinaryInRepositoryInterceptor extends AbstractPhaseInterceptor<Message> {
+
+ private static final Logger log = LoggerFactory.getLogger(StoreSOAPBodyBinaryInRepositoryInterceptor.class);
+
+ private final CXFMessageUtils messageUtils;
+ private final SOAPUtils soapUtils;
+ private final DeliveryRepository repository;
+
+ @Autowired
+ public StoreSOAPBodyBinaryInRepositoryInterceptor(CXFMessageUtils extractor, SOAPUtils soapUtils,
+ DeliveryRepository repository) {
+ super(Phase.RECEIVE);
+ this.messageUtils = extractor;
+ this.soapUtils = soapUtils;
+ this.repository = repository;
+ }
+
+ public void handleMessage(Message message) {
+
+ try {
+ byte[] content = messageUtils.copyContent(message);
+
+ if(content.length > 0) {
+ Element document = soapUtils.toDOM(content);
+ byte[] status = soapUtils.unwrapSoapEnvelope(document);
+ String appDeliveryId = soapUtils.getAppDeliveryIDFrom(document);
+ repository.addSignedDeliveryRequestStatus(status, appDeliveryId);
+ log.info("Store binary DeliveryRequestStatus with AppDeliveryId={}", appDeliveryId);
+ }
+ } catch (ParserConfigurationException | SAXException | IOException | NullPointerException e) {
+ throw new MoaZSException("Could not extract signed data from message.", e);
+ }
+ }
+
+}