diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index deb3050505bb39ad70d676571a3038df0261b95d..f259383d0672427547f8f3ed01871c74bd97922b 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java @@ -14,9 +14,9 @@ import lombok.Builder; import lombok.Getter; import lombok.RequiredArgsConstructor; -@RequiredArgsConstructor(access = AccessLevel.PROTECTED) -@Builder(access = AccessLevel.PROTECTED) -@Getter(AccessLevel.PROTECTED) +@RequiredArgsConstructor(access = AccessLevel.MODULE) +@Builder(access = AccessLevel.MODULE) +@Getter(AccessLevel.MODULE) public class XtaClient { private final WrappedXtaService service; diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java index 241815df4e475a81c735ba7e47b40adb8d6d058a..8d9c3ec43f972419a8b33ee3dd2335d0fb51ba01 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClientFactory.java @@ -17,6 +17,7 @@ public class XtaClientFactory { public static XtaClientFactory from(final XtaClientConfig config) { return XtaClientFactory.builder() + .config(config) .configValidator(XtaConfigValidator.builder().build()) .wrappedXtaServiceFactory(WrappedXtaServiceFactory.from(config)) .build(); diff --git a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java index 1918f5066d532c30e0785c8f23a8f101b64fb585..96ee5fde82dd75cec63e94ddde95eb0c01792d8d 100644 --- a/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java +++ b/src/main/java/de/ozgcloud/xta/client/config/XtaClientConfig.java @@ -31,7 +31,7 @@ import lombok.ToString; public class XtaClientConfig { @NotEmpty(message = "at least one client identifier is required") - private final List<String> clientIdentifiers; + private final List<@NotBlank String> clientIdentifiers; @NotBlank private final String managementServiceUrl; @@ -41,14 +41,19 @@ public class XtaClientConfig { private final String msgBoxServiceUrl; @Positive - private final int maxListItems; + @Builder.Default + private final int maxListItems = 50; @Valid - private final KeyStore clientCertKeystore; + @Builder.Default + private final KeyStore clientCertKeystore = null; - private final boolean schemaValidation; - private final boolean logSoapRequests; - private final boolean logSoapResponses; + @Builder.Default + private final boolean schemaValidation = true; + @Builder.Default + private final boolean logSoapRequests = false; + @Builder.Default + private final boolean logSoapResponses = false; @RequiredArgsConstructor @Getter diff --git a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java index d9408b49fda21cc0bb4ade0665b2ebee5ff24f30..7aa74b7b14019b77338596786bbae12c1472a34d 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java +++ b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactory.java @@ -11,12 +11,12 @@ import lombok.RequiredArgsConstructor; @Builder public class WrappedXtaServiceFactory { - private final XTAServiceFactory xtaServiceFactory; + private final XTAPortTripleFactory xtaServiceFactory; private final WebServiceTypeMapper typeMapper; public static WrappedXtaServiceFactory from(final XtaClientConfig config) { return WrappedXtaServiceFactory.builder() - .xtaServiceFactory(XTAServiceFactory.from(config)) + .xtaServiceFactory(XTAPortTripleFactory.from(config)) .typeMapper(Mappers.getMapper(WebServiceTypeMapper.class)) .build(); } diff --git a/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java b/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java index b9e9285663d5dcf76367d11bd514bd5dcb0d38b8..b9348e7c3f669e22ed0da6488dc82620e452d9da 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java +++ b/src/main/java/de/ozgcloud/xta/client/core/XtaTLSClientParametersFactory.java @@ -38,7 +38,7 @@ public class XtaTLSClientParametersFactory { return parameters; } - SSLContext createXtaSslContext() throws ClientInitializationException { + public SSLContext createXtaSslContext() throws ClientInitializationException { try { var sslContextBuilder = createSSLContextBuilder(); var clientCertKeystore = config.getClientCertKeystore(); diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java index c25cda1bb0813f064158ea4b847804a68153a424..01b2c684b55069ddf44759ebacc21816abfc22eb 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java @@ -3,13 +3,14 @@ package de.ozgcloud.xta.client.model; import java.util.List; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import lombok.Builder; @Builder public record XtaMessage( - @Valid XtaMessageMetaData metaData, - @Valid XtaFile messageFile, - @Valid List<XtaFile> attachments + @NotNull @Valid XtaMessageMetaData metaData, + @NotNull @Valid XtaFile messageFile, + @NotNull List<@Valid XtaFile> attachments ) { } diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java index b60fd63dfc739e81109ae0ab5e3aa914ef5a0099..5f1943e41d77cfc1f8124595efd23f59f730bc12 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaData.java @@ -4,6 +4,7 @@ import java.math.BigInteger; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; import lombok.Builder; @@ -15,8 +16,8 @@ public record XtaMessageMetaData( @NotBlank String messageTypeCode, @NotBlank String messageTypePayloadSchema, @NotBlank String messageId, - @Valid Identifier authorIdentifier, - @Valid Identifier readerIdentifier, + @NotNull @Valid Identifier authorIdentifier, + @NotNull @Valid Identifier readerIdentifier, @PositiveOrZero BigInteger messageSize ) { } diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java index cdbc82147a390035d3a55a979431886849643faf..b8af0b8ddfe5b4525caf3c7e15399adbb6301490 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataListing.java @@ -4,6 +4,7 @@ import java.math.BigInteger; import java.util.List; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; import lombok.Builder; @@ -11,6 +12,6 @@ import lombok.Builder; @Builder public record XtaMessageMetaDataListing( @PositiveOrZero BigInteger pendingMessageCount, - @Valid List<XtaMessageMetaData> messages + @NotNull @Valid List<XtaMessageMetaData> messages ) { } diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..f1e87d592db38b75b234537a3ec06b0f70e0758e --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java @@ -0,0 +1,76 @@ +package de.ozgcloud.xta.client; + +import static org.assertj.core.api.Assertions.*; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import com.google.common.io.Files; + +import de.ozgcloud.xta.client.config.XtaClientConfig; +import lombok.SneakyThrows; + +class XtaClientITCase { + + private XtaClient client; + + private static final String CLIENT_IDENTIFIER = "afmsh:010600000000_Online-Dienste"; + + private static final String BASE_URL = "https://li33-0005.dp.dsecurecloud.de/MB_XTA-WS/XTA210"; + + private static final XtaClientFactory clientFactory; + + private static final XtaClientConfig CONFIG; + + static { + var clientCertKeyStore = XtaClientConfig.KeyStore.builder() + .content(readBytesFromFile("/path/to/KOP_SH_KIEL_DEV.p12")) + .type("PKCS12") + .password("***".toCharArray()) + .build(); + CONFIG = XtaClientConfig.builder() + .clientIdentifiers(List.of(CLIENT_IDENTIFIER)) + .managementServiceUrl(BASE_URL + "managementPort.svc") + .sendServiceUrl(BASE_URL + "sendPort.svc") + .msgBoxServiceUrl(BASE_URL + "msgBoxPort.svc") + .clientCertKeystore(clientCertKeyStore) + .logSoapRequests(true) + .logSoapResponses(true) + .build(); + clientFactory = XtaClientFactory.from(CONFIG); + } + + @BeforeEach + @SneakyThrows + void mock() { + client = clientFactory.create(); + } + + @DisplayName("get status list") + @Nested + class TestGetStatusList { + + @DisplayName("should return with no pending messages") + @Test + @SneakyThrows + void shouldReturnWithNoPendingMessages() { + var result = client.getMessagesMetadata(CLIENT_IDENTIFIER); + + assertThat(result.pendingMessageCount()).isZero(); + } + } + + private static byte[] readBytesFromFile(String path) { + try { + return Files.toByteArray(new File(path)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java index d6eec9bae0b5e5396d1fe567ffd299af967612d6..486ee8e15ab3ef48e93072def1a89d156b46d757 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceFactoryTest.java @@ -20,7 +20,7 @@ import lombok.SneakyThrows; class WrappedXtaServiceFactoryTest { @Mock - private XTAServiceFactory xtaServiceFactory; + private XTAPortTripleFactory xtaServiceFactory; @Mock private WebServiceTypeMapper typeMapper; @Mock diff --git a/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java b/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java index 6d71e60906e7108d118e00b6f8b364f237de227b..ad1a9564b18d94b989a0121af8ce71320282f610 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/XTAServiceFactoryTest.java @@ -1,6 +1,6 @@ package de.ozgcloud.xta.client.core; -import static de.ozgcloud.xta.client.core.XTAServiceFactory.*; +import static de.ozgcloud.xta.client.core.XTAPortTripleFactory.*; import static org.assertj.core.api.AssertionsForClassTypes.*; import static org.mockito.Mockito.*; @@ -52,7 +52,7 @@ class XTAServiceFactoryTest { @Spy @InjectMocks - private XTAServiceFactory factory; + private XTAPortTripleFactory factory; @DisplayName("create") @Nested @@ -198,6 +198,7 @@ class XTAServiceFactoryTest { @DisplayName("should keep old") @Test + @SneakyThrows void shouldKeepOld() { factory.configureRequestContext(endpointUrl, requestContext); @@ -216,6 +217,7 @@ class XTAServiceFactoryTest { @DisplayName("should add schema validation") @ParameterizedTest @ValueSource(booleans = { true, false }) + @SneakyThrows void shouldAddSchemaValidation(boolean validation) { reset(config); when(config.isSchemaValidation()).thenReturn(validation);