Skip to content
Snippets Groups Projects
Commit 5f06bbfa authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3136 Nachrichtenbroker Connection tests

parent 16caf618
No related branches found
No related tags found
No related merge requests found
Showing
with 408 additions and 83 deletions
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<parent> <parent>
<groupId>de.itvsh.kop.eingangsadapter</groupId> <groupId>de.itvsh.kop.eingangsadapter</groupId>
<artifactId>parent</artifactId> <artifactId>parent</artifactId>
<version>1.7.0-SNAPSHOT</version> <version>1.6.0</version>
</parent> </parent>
<artifactId>xta-adapter</artifactId> <artifactId>xta-adapter</artifactId>
<name>Eingangs Adapter - XTA</name> <name>Eingangs Adapter - XTA</name>
...@@ -24,24 +24,98 @@ ...@@ -24,24 +24,98 @@
<groupId>org.mapstruct</groupId> <groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <artifactId>mapstruct</artifactId>
</dependency> </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> </dependencies>
<build> <build>
<plugins> <plugins>
<!-- <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> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId> <artifactId>jaxb2-maven-plugin</artifactId>
<!-- <version>2.5.0</version>-->
<executions> <executions>
<!-- <execution>-->
<!-- <id>schema files</id>-->
<!-- <phase>generate-sources</phase>-->
<!-- <goals>-->
<!-- <goal>xjc</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <sourceType>xmlschema</sourceType>-->
<!-- </configuration>-->
<!-- </execution>-->
<execution> <execution>
<id>schema files</id> <id>wsdl1</id>
<phase>generate-sources</phase>
<goals> <goals>
<goal>xjc</goal> <goal>xjc</goal>
</goals> </goals>
<configuration> <configuration>
<sourceType>xmlschema</sourceType> <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> </configuration>
</execution> </execution>
</executions> </executions>
<!-- <dependencies>-->
<!-- <dependency>-->
<!-- <groupId>org.glassfish.jaxb</groupId>-->
<!-- <artifactId>jaxb-runtime</artifactId>-->
<!-- <version>4.0.1</version>-->
<!-- </dependency>-->
<!-- </dependencies>-->
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
......
package de.ozgcloud.eingang.xta; 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.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.MsgStatusListType;
import eu.osci.ws._2008._05.transport.ObjectFactory;
import lombok.extern.java.Log;
@Service @Service
class XtaRemoteService { @Log
class XtaRemoteService extends WebServiceGatewaySupport {
@Autowired // @Autowired
private XtaMessageMetaDataMapper mapper; // private XtaMessageMetaDataMapper mapper;
public Stream<XtaMessageMetaData> getMessagesMetadata() { // public Stream<XtaMessageMetaData> getMessagesMetadata() {
return getStatusList().getMessageMetaData().stream().map(mapper::fromSoap); // return getStatusList().getMessageMetaData().stream().map(mapper::fromSoap);
// TODO load more message with getNextStatusList // // TODO load more message with getNextStatusList
} // }
MsgStatusListType getStatusList() { MsgStatusListType getStatusList() throws URISyntaxException {
// TODO implement me
return null; 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) { public XtaMessage getMessage(XtaMessageId messageId) {
......
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;
}
}
}
<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"> <wsp:Policy wsu:Id="osciCommon">
<!--###### general osci policies ##########--> <!--###### general osci policies ##########-->
<wsp:All> <wsp:All>
...@@ -60,10 +74,61 @@ ...@@ -60,10 +74,61 @@
<!--Datenstrukturen --> <!--Datenstrukturen -->
<types> <types>
<xsd:schema targetNamespace="http://xoev.de/transport/xta/211"> <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/2014/10/transport" schemaLocation="../xsd/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:import namespace="http://www.osci.eu/ws/2008/05/transport" schemaLocation="../xsd/OSCI2_02.xsd"/>
<xsd:include schemaLocation="http://xoev.de/transport/xta/211/XTA-Webservice-Globale-Elemente.xsd"/> <xsd:include schemaLocation="../xsd/XTA-Webservice-Globale-Elemente.xsd"/>
<xsd:include schemaLocation="http://xoev.de/transport/xta/211/XTA-Webservice-Exceptions.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> </xsd:schema>
</types> </types>
<!--Nachrichten --> <!--Nachrichten -->
......
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
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
<?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
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();
}
}
package de.ozgcloud.eingang.xta; 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 { class XtaRemoteServiceTest {
//
@Spy // @Spy
@InjectMocks // @InjectMocks
private XtaRemoteService service; // private XtaRemoteService service;
//
@Mock // @Mock
private XtaMessageMetaDataMapper mapper; // private XtaMessageMetaDataMapper mapper;
//
@Nested // @Nested
class TestGetMessagesMetadata { // class TestGetMessagesMetadata {
//
@BeforeEach // @BeforeEach
void init() { // void init() {
when(service.getStatusList()).thenReturn(MsgStatusListTypeTestFactory.create()); // when(service.getStatusList()).thenReturn(MsgStatusListTypeTestFactory.create());
when(mapper.fromSoap(any())).thenReturn(XtaMessageMetaDataTestFactory.create()); // when(mapper.fromSoap(any())).thenReturn(XtaMessageMetaDataTestFactory.create());
} // }
//
@Test // @Test
void shouldCallGetStatusList() { // void shouldCallGetStatusList() {
service.getMessagesMetadata().toList(); // service.getMessagesMetadata().toList();
//
verify(service).getStatusList(); // verify(service).getStatusList();
} // }
//
@Test // @Test
void shouldCallMapper() { // void shouldCallMapper() {
service.getMessagesMetadata().toList(); // service.getMessagesMetadata().toList();
//
verify(mapper).fromSoap(notNull()); // verify(mapper).fromSoap(notNull());
} // }
//
@Test // @Test
void shouldReturnMessageId() { // void shouldReturnMessageId() {
var metaData = service.getMessagesMetadata(); // var metaData = service.getMessagesMetadata();
//
assertThat(metaData).hasSize(1).first().usingRecursiveComparison().isEqualTo(XtaMessageMetaDataTestFactory.create()); // assertThat(metaData).hasSize(1).first().usingRecursiveComparison().isEqualTo(XtaMessageMetaDataTestFactory.create());
} // }
} // }
} }
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment