From 5f06bbfa78ea8c68eecaade8a64f9100e9fbb984 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Sun, 9 Apr 2023 22:33:22 +0200
Subject: [PATCH] OZG-3136 Nachrichtenbroker Connection tests

---
 xta-adapter/pom.xml                           | 108 +++++++++++++++---
 .../eingang/xta/XtaRemoteService.java         |  51 +++++++--
 .../xta/XtaRemoteServiceConfiguration.java    | 100 ++++++++++++++++
 .../src/main/{wsdl => resources}/XTA.wsdl     |  75 +++++++++++-
 .../src/main/resources/application.properties |  20 ++++
 .../src/main/resources/log4j.properties       |   9 ++
 xta-adapter/src/main/resources/logback.xml    |  12 ++
 .../eingang/xta/XtaRemoteServiceLiveTest.java |  29 +++++
 .../eingang/xta/XtaRemoteServiceTest.java     |  87 ++++++--------
 .../src/test/resources/KOP_SH_KIEL_DEV.p12    | Bin 0 -> 13210 bytes
 .../src/test/resources/KOP_SH_KIEL_DEV.pfx    | Bin 0 -> 7678 bytes
 11 files changed, 408 insertions(+), 83 deletions(-)
 create mode 100644 xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
 rename xta-adapter/src/main/{wsdl => resources}/XTA.wsdl (88%)
 create mode 100644 xta-adapter/src/main/resources/application.properties
 create mode 100644 xta-adapter/src/main/resources/log4j.properties
 create mode 100644 xta-adapter/src/main/resources/logback.xml
 create mode 100644 xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceLiveTest.java
 create mode 100644 xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.p12
 create mode 100644 xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.pfx

diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml
index 64e509879..e0c6f9b8f 100644
--- a/xta-adapter/pom.xml
+++ b/xta-adapter/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.7.0-SNAPSHOT</version>
+		<version>1.6.0</version>
 	</parent>
 	<artifactId>xta-adapter</artifactId>
 	<name>Eingangs Adapter - XTA</name>
@@ -24,25 +24,99 @@
 			<groupId>org.mapstruct</groupId>
 			<artifactId>mapstruct</artifactId>
 		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.ws</groupId>
+			<artifactId>spring-ws-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.ws</groupId>
+			<artifactId>spring-ws-support</artifactId>
+		</dependency>
+		
+		<!-- JAXB API only -->
+ <dependency>
+      <groupId>jakarta.xml.bind</groupId>
+      <artifactId>jakarta.xml.bind-api</artifactId>
+      <version>2.3.3</version>
+  </dependency>
+
+  <dependency>
+      <groupId>com.sun.xml.bind</groupId>
+      <artifactId>jaxb-impl</artifactId>      <version>2.3.3</version>
+  </dependency>
+		<!-- https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api -->
+<!--<dependency>-->
+<!--    <groupId>javax.xml.ws</groupId>-->
+<!--    <artifactId>jaxws-impl</artifactId>-->
+<!--    <version>2.3.1</version>-->
+<!--</dependency>-->
+
 	</dependencies>
 	<build>
 		<plugins>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>jaxb2-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>schema files</id>
-						<phase>generate-sources</phase>
-						<goals>
-							<goal>xjc</goal>
-						</goals>
-						<configuration>
-							<sourceType>xmlschema</sourceType>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
+			<!--			<plugin>-->
+			<!--				<groupId>com.evolvedbinary.maven.jvnet</groupId>-->
+			<!--				<artifactId>jaxb30-maven-plugin</artifactId>-->
+			<!--				<configuration><cleanPackageDirectories>false</cleanPackageDirectories></configuration>-->
+			<!--			</plugin>-->
+			<!--			<plugin>-->
+			<!--				<groupId>com.helger.maven</groupId>-->
+			<!--				<artifactId>jaxb40-maven-plugin</artifactId>-->
+			<!--				<version>0.16.1</version>-->
+			<!--				<executions>-->
+			<!--					<execution>-->
+			<!--						<goals>-->
+			<!--							<goal>generate</goal>-->
+			<!--						</goals>-->
+			<!--						<configuration>-->
+			<!--							<cleanPackageDirectories>false</cleanPackageDirectories>-->
+			<!--							<bindingIncludes>*wsdl</bindingIncludes>-->
+			<!--						</configuration>-->
+			<!--					</execution>-->
+			<!--				</executions>-->
+			<!--			</plugin>-->
+						<plugin>
+							<groupId>org.codehaus.mojo</groupId>
+							<artifactId>jaxb2-maven-plugin</artifactId>
+<!--							<version>2.5.0</version>-->
+							<executions>
+			<!--					<execution>-->
+			<!--						<id>schema files</id>-->
+			<!--						<phase>generate-sources</phase>-->
+			<!--						<goals>-->
+			<!--							<goal>xjc</goal>-->
+			<!--						</goals>-->
+			<!--						<configuration>-->
+			<!--							<sourceType>xmlschema</sourceType>-->
+			<!--						</configuration>-->
+			<!--					</execution>-->
+								<execution>
+									<id>wsdl1</id>
+									<goals>
+										<goal>xjc</goal>
+									</goals>
+									<configuration>
+										<sourceType>wsdl</sourceType>
+										<sources>
+											<source>${basedir}/src/main/resources/XTA.wsdl</source>
+										</sources>
+<!--										<-->
+<!--										<schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory>-->
+										<clearOutputDir>false</clearOutputDir>
+																	<arguments>-wsdl</arguments>
+									</configuration>
+								</execution>
+							</executions>
+			<!--				<dependencies>-->
+			<!--					<dependency>-->
+			<!--		<groupId>org.glassfish.jaxb</groupId>-->
+			<!--		<artifactId>jaxb-runtime</artifactId>-->
+			<!--		<version>4.0.1</version>-->
+			<!--	</dependency>-->
+			<!--				</dependencies>-->
+						</plugin>
 		</plugins>
 	</build>
 </project>
\ No newline at end of file
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
index ba822eacb..e53c53eba 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteService.java
@@ -1,26 +1,53 @@
 package de.ozgcloud.eingang.xta;
 
-import java.util.stream.Stream;
+import java.math.BigInteger;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.bind.JAXBElement;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.EndpointReference;
 
+import eu.osci.ws._2008._05.transport.MsgBoxStatusListRequestType;
 import eu.osci.ws._2008._05.transport.MsgStatusListType;
+import eu.osci.ws._2008._05.transport.ObjectFactory;
+import lombok.extern.java.Log;
 
 @Service
-class XtaRemoteService {
+@Log
+class XtaRemoteService extends WebServiceGatewaySupport {
 
-	@Autowired
-	private XtaMessageMetaDataMapper mapper;
+//	@Autowired
+//	private XtaMessageMetaDataMapper mapper;
 
-	public Stream<XtaMessageMetaData> getMessagesMetadata() {
-		return getStatusList().getMessageMetaData().stream().map(mapper::fromSoap);
-		// TODO load more message with getNextStatusList
-	}
+//	public Stream<XtaMessageMetaData> getMessagesMetadata() {
+//		return getStatusList().getMessageMetaData().stream().map(mapper::fromSoap);
+//		// TODO load more message with getNextStatusList
+//	}
 
-	MsgStatusListType getStatusList() {
-		// TODO implement me
-		return null;
+	MsgStatusListType getStatusList() throws URISyntaxException {
+
+		ObjectFactory objectFactory = new ObjectFactory();
+//
+		MsgBoxStatusListRequestType msg = new MsgBoxStatusListRequestType();
+		msg.setMaxListItems(BigInteger.valueOf(5));
+		JAXBElement<MsgBoxStatusListRequestType> getStatusList = objectFactory.createMsgBoxStatusListRequest(msg);
+//
+//		getWebServiceTemplate()
+//		.marshalSendAndReceive(objectFactory.createSendBspNachrichtNative(sendBspNachrichtNative)))
+//				.getValue();
+
+//	LOG.
+
+		var callback = new ActionCallback(new URI("http://LI33-0005/MB_XTA-WS/XTA210msgBoxPort.svc"));
+		callback.setReplyTo(new EndpointReference(new URI("https://localhost:3000/MB_XTA-WS/XTA210msgBoxPort.svc")));
+
+		return ((JAXBElement<MsgStatusListType>) getWebServiceTemplate().marshalSendAndReceive(
+				"https://localhost:3000/MB_XTA-WS/XTA210msgBoxPort.svc",
+				getStatusList, callback)).getValue();
 	}
 
 	public XtaMessage getMessage(XtaMessageId messageId) {
diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
new file mode 100644
index 000000000..345a46804
--- /dev/null
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaRemoteServiceConfiguration.java
@@ -0,0 +1,100 @@
+package de.ozgcloud.eingang.xta;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.oxm.jaxb.Jaxb2Marshaller;
+import org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender;
+
+@Configuration
+public class XtaRemoteServiceConfiguration {
+
+	private static final String KEYSTORE_TYPE = "PKCS12";
+
+	@Value("classpath:KOP_SH_KIEL_DEV.p12")
+	private Resource certificate;
+
+	private String certificateKey = "";
+
+	@Bean
+	public Jaxb2Marshaller marshaller() {
+		Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
+		marshaller.setContextPath("eu.osci.ws._2008._05.transport");
+		return marshaller;
+	}
+
+	@Bean
+	public XtaRemoteService xtaRemoteService(Jaxb2Marshaller marshaller)
+			throws UnrecoverableKeyException, KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {
+		XtaRemoteService client = new XtaRemoteService();
+		client.setDefaultUri("https://localhost:3000/MB_XTA-WS/XTA210msgBoxPort.svc");
+		marshaller.setMtomEnabled(true);
+		client.setMarshaller(marshaller);
+		client.setUnmarshaller(marshaller);
+
+		client.setMessageSender(initMessageSender());
+		return client;
+	}
+
+	HttpsUrlConnectionMessageSender initMessageSender()
+			throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, UnrecoverableKeyException {
+		var keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+		keyManagerFactory.init(getKeyStore(), certificateKey.toCharArray());
+
+		var messageSender = new HttpsUrlConnectionMessageSender();
+		messageSender.setKeyManagers(keyManagerFactory.getKeyManagers());
+		messageSender.setTrustManagers(new TrustManager[] { new UnTrustworthyTrustManager() });
+		messageSender.setHostnameVerifier(new HostnameVerifier() {
+
+			@Override
+			public boolean verify(String hostname, SSLSession session) {
+				return true;
+			}
+		});
+		return messageSender;
+	}
+
+	KeyStore getKeyStore() throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {
+		var keyStoreResource = certificate;
+//		var keysres = XtaRemoteServiceConfiguration.class.getResourceAsStream("/KOP_SH_KIEL_DEV.p12");
+//		assert (keysres != null);
+		var keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
+		try (InputStream keyStoreStream = keyStoreResource.getInputStream()) {
+//		try (InputStream keyStoreStream = keysres) {
+			keyStore.load(keyStoreStream, certificateKey.toCharArray());
+		}
+
+		return keyStore;
+	}
+
+	static class UnTrustworthyTrustManager implements X509TrustManager {
+		@Override
+		public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+		}
+
+		@Override
+		public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
+		}
+
+		@Override
+		public X509Certificate[] getAcceptedIssuers() {
+			return null;
+		}
+	}
+}
diff --git a/xta-adapter/src/main/wsdl/XTA.wsdl b/xta-adapter/src/main/resources/XTA.wsdl
similarity index 88%
rename from xta-adapter/src/main/wsdl/XTA.wsdl
rename to xta-adapter/src/main/resources/XTA.wsdl
index 55d33cfaf..3e449f770 100644
--- a/xta-adapter/src/main/wsdl/XTA.wsdl
+++ b/xta-adapter/src/main/resources/XTA.wsdl
@@ -1,4 +1,18 @@
-<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://xoev.de/transport/xta/211" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wspmtom="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" xmlns:osci="http://www.osci.eu/ws/2008/05/transport" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:oscimeta="http://www.osci.eu/ws/2014/10/transport" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:xta="http://xoev.de/transport/xta/211" name="XTA-Webservice">
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
+targetNamespace="http://xoev.de/transport/xta/211" 
+xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
+xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" 
+xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+xmlns:wsa="http://www.w3.org/2005/08/addressing" 
+xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" 
+xmlns:wspmtom="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" 
+xmlns:osci="http://www.osci.eu/ws/2008/05/transport" 
+xmlns:wsp="http://www.w3.org/ns/ws-policy" 
+xmlns:oscimeta="http://www.osci.eu/ws/2014/10/transport" 
+xmlns:wsu="oasis-200401-wss-wssecurity-utility-1.0.xsd" 
+xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" 
+xmlns:s12="http://www.w3.org/2003/05/soap-envelope" 
+xmlns:xta="http://xoev.de/transport/xta/211" name="XTA-Webservice">
 	<wsp:Policy wsu:Id="osciCommon">
 		<!--###### general osci policies ##########-->
 		<wsp:All>
@@ -60,10 +74,61 @@
 	<!--Datenstrukturen -->
 	<types>
 		<xsd:schema targetNamespace="http://xoev.de/transport/xta/211">
-			<xsd:import namespace="http://www.osci.eu/ws/2014/10/transport" schemaLocation="http://www.osci.eu/ws/2014/10/transport/OSCI_MessageMetaData_V2.02.xsd"/>
-			<xsd:import namespace="http://www.osci.eu/ws/2008/05/transport" schemaLocation="http://www.osci.eu/ws/2014/10/transport/OSCI2_02.xsd"/>
-			<xsd:include schemaLocation="http://xoev.de/transport/xta/211/XTA-Webservice-Globale-Elemente.xsd"/>
-			<xsd:include schemaLocation="http://xoev.de/transport/xta/211/XTA-Webservice-Exceptions.xsd"/>
+			<xsd:import namespace="http://www.osci.eu/ws/2014/10/transport" schemaLocation="../xsd/OSCI_MessageMetaData_V2.02.xsd"/>
+			<xsd:import namespace="http://www.osci.eu/ws/2008/05/transport" schemaLocation="../xsd/OSCI2_02.xsd"/>
+			<xsd:include schemaLocation="../xsd/XTA-Webservice-Globale-Elemente.xsd"/>
+			<xsd:include schemaLocation="../xsd/XTA-Webservice-Exceptions.xsd"/>
+			
+			<!--<xsd:element name="getStatusList">
+		        <xsd:complexType>
+		          <xsd:all>
+		            <xsd:element name="getStatusList" type="xsd:string"/>
+		          </xsd:all>
+		        </xsd:complexType>
+	        </xsd:element>-->
+	        
+			<!--<xsd:complexType name='getStatusList'>
+				<xsd:sequence>
+					<xsd:element minOccurs='1' name='FetchRequest'
+						type='xsd:base64Binary' />
+				</xsd:sequence>
+			</xsd:complexType>-->
+			
+			<!--<xsd:element name="getStatusList">
+              <xsd:complexType>
+                  <xsd:all>
+                      <xsd:element name="tickerSymbol" type="xsd:string"/>
+                  </xsd:all>
+              </xsd:complexType>
+           </xsd:element>-->
+           
+<!--			<xsd:element name='MsgBoxStatusListRequest' type='osci:MsgBoxStatusListRequest'>
+				<xsd:complexType name='MsgBoxStatusListRequest'>
+					<xsd:sequence>
+						<xsd:element minOccurs='1' name='FetchResponse'
+							type='xsd:base64Binary' />
+					</xsd:sequence>
+				</xsd:complexType>
+			</xsd:element>
+-->
+			<xsd:element name="MsgBoxStatusListRequest" type="osci:MsgBoxStatusListRequestType"/>
+        <xsd:complexType name="MsgBoxStatusListRequest">
+                <xsd:complexContent>
+                        <xsd:extension base="osci:MsgBoxRequestType">
+                                <xsd:attribute name="maxListItems" type="xsd:positiveInteger"/>
+                                <xsd:attribute name="ListForm">
+                                        <xsd:simpleType>
+                                                <xsd:restriction base="xsd:NMTOKEN">
+                                                        <xsd:enumeration value="MsgAtrributes"/>
+                                                        <xsd:enumeration value="MessageMetaData"/>
+                                                </xsd:restriction>
+                                        </xsd:simpleType>
+                                </xsd:attribute>
+                        </xsd:extension>
+                </xsd:complexContent>
+        </xsd:complexType>
+
+		
 		</xsd:schema>
 	</types>
 	<!--Nachrichten -->
diff --git a/xta-adapter/src/main/resources/application.properties b/xta-adapter/src/main/resources/application.properties
new file mode 100644
index 000000000..bfd6ba806
--- /dev/null
+++ b/xta-adapter/src/main/resources/application.properties
@@ -0,0 +1,20 @@
+logging.level.org.springframework.web=DEBUG
+logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG
+logging.level.org.springframework.ws.server.MessageTracing.sent=DEBUG
+logging.level.org.springframework.ws.client.MessageTracing.received=TRACE
+logging.level.org.springframework.ws.server.MessageTracing.received=TRACE
+log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
+log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
+log4j.logger.org.springframework.ws.client.MessageTracing.sent=DEBUG
+log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
+
+log4j.logger.org.springframework.ws.server.MessageTracing.sent=DEBUG
+log4j.logger.org.springframework.ws.server.MessageTracing.received=TRACE
+
+log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG
+log4j.logger.org.springframework.ws.client.MessageTracing=TRACE
+logging.level.org.springframework.ws=TRACE
+
+org.springframework.ws.server.MessageTracing=TRACE
+org.springframework.ws.server.MessageTracing.sent=TRACE
+org.springframework.ws.client.MessageTracing.received=TRACE
diff --git a/xta-adapter/src/main/resources/log4j.properties b/xta-adapter/src/main/resources/log4j.properties
new file mode 100644
index 000000000..543d4bab5
--- /dev/null
+++ b/xta-adapter/src/main/resources/log4j.properties
@@ -0,0 +1,9 @@
+log4j.rootCategory=INFO, stdout
+
+log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
+log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE
+log4j.logger.org.springframework.ws.server.MessageTracing=TRACE
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n
\ No newline at end of file
diff --git a/xta-adapter/src/main/resources/logback.xml b/xta-adapter/src/main/resources/logback.xml
new file mode 100644
index 000000000..dea8c2983
--- /dev/null
+++ b/xta-adapter/src/main/resources/logback.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+
+    <include resource="org/springframework/boot/logging/logback/base.xml"/>
+
+    <logger name="org.springframework.web" level="INFO"/>
+
+    <logger name="org.springframework.ws.client.MessageTracing.sent" level="TRACE"/>
+    <logger name="org.springframework.ws.client.MessageTracing.received" level="TRACE"/>
+    <logger name="org.springframework.ws.server.MessageTracing" level="TRACE"/>
+
+</configuration>
\ No newline at end of file
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceLiveTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceLiveTest.java
new file mode 100644
index 000000000..8afc0038e
--- /dev/null
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceLiveTest.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.eingang.xta;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.net.URISyntaxException;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+
+import eu.osci.ws._2008._05.transport.MsgStatusListType;
+
+@SpringBootTest
+@ContextConfiguration(classes = XtaRemoteServiceConfiguration.class, loader = AnnotationConfigContextLoader.class)
+public class XtaRemoteServiceLiveTest {
+
+	@Autowired
+	XtaRemoteService xtaRemoteService;
+
+	@Test
+	void test() throws URISyntaxException {
+
+		MsgStatusListType rsp = xtaRemoteService.getStatusList();
+		assertThat(rsp.getMessageMetaData()).isNotEmpty();
+	}
+
+}
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceTest.java
index c74db874b..89b764398 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteServiceTest.java
@@ -1,53 +1,42 @@
 package de.ozgcloud.eingang.xta;
 
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-
 class XtaRemoteServiceTest {
-
-	@Spy
-	@InjectMocks
-	private XtaRemoteService service;
-
-	@Mock
-	private XtaMessageMetaDataMapper mapper;
-
-	@Nested
-	class TestGetMessagesMetadata {
-
-		@BeforeEach
-		void init() {
-			when(service.getStatusList()).thenReturn(MsgStatusListTypeTestFactory.create());
-			when(mapper.fromSoap(any())).thenReturn(XtaMessageMetaDataTestFactory.create());
-		}
-
-		@Test
-		void shouldCallGetStatusList() {
-			service.getMessagesMetadata().toList();
-
-			verify(service).getStatusList();
-		}
-
-		@Test
-		void shouldCallMapper() {
-			service.getMessagesMetadata().toList();
-
-			verify(mapper).fromSoap(notNull());
-		}
-
-		@Test
-		void shouldReturnMessageId() {
-			var metaData = service.getMessagesMetadata();
-
-			assertThat(metaData).hasSize(1).first().usingRecursiveComparison().isEqualTo(XtaMessageMetaDataTestFactory.create());
-		}
-	}
+//
+//	@Spy
+//	@InjectMocks
+//	private XtaRemoteService service;
+//
+//	@Mock
+//	private XtaMessageMetaDataMapper mapper;
+//
+//	@Nested
+//	class TestGetMessagesMetadata {
+//
+//		@BeforeEach
+//		void init() {
+//			when(service.getStatusList()).thenReturn(MsgStatusListTypeTestFactory.create());
+//			when(mapper.fromSoap(any())).thenReturn(XtaMessageMetaDataTestFactory.create());
+//		}
+//
+//		@Test
+//		void shouldCallGetStatusList() {
+//			service.getMessagesMetadata().toList();
+//
+//			verify(service).getStatusList();
+//		}
+//
+//		@Test
+//		void shouldCallMapper() {
+//			service.getMessagesMetadata().toList();
+//
+//			verify(mapper).fromSoap(notNull());
+//		}
+//
+//		@Test
+//		void shouldReturnMessageId() {
+//			var metaData = service.getMessagesMetadata();
+//
+//			assertThat(metaData).hasSize(1).first().usingRecursiveComparison().isEqualTo(XtaMessageMetaDataTestFactory.create());
+//		}
+//	}
 }
diff --git a/xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.p12 b/xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.p12
new file mode 100644
index 0000000000000000000000000000000000000000..2fba6f4b2e751d74d1ce155b2f6415d83d256410
GIT binary patch
literal 13210
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
Q`OUDo@0Tz!Gqx=N0HmM>L;wH)

literal 0
HcmV?d00001

diff --git a/xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.pfx b/xta-adapter/src/test/resources/KOP_SH_KIEL_DEV.pfx
new file mode 100644
index 0000000000000000000000000000000000000000..e3cfb904cfa693ffa5e61e55c6bea59195d4a9c3
GIT binary patch
literal 7678
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
WY5DRfy{-hul?USwJl+JFiv<9j1?fuw

literal 0
HcmV?d00001

-- 
GitLab