Skip to content
Snippets Groups Projects
Commit 441980a4 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-6239 Add ValidXtaMessageId annotation

parent 844a2b59
Branches
Tags
No related merge requests found
Showing
with 150 additions and 103 deletions
/*
* @formatter:off
*
* Copyright 2021-2022 Koordinierungsstelle für IT-Standards (KoSIT)
*
* Licensed under the European Public License, Version 1.2 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/EUPL-1.2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* @formatter:on
*/
package de.ozgcloud.xta.test.app.model;
import java.util.Collections;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class ProtocolMetadata {
private String softwareManufacturer = "Nortal AG";
private String softwareName = "Dummy Produkt";
private String softwareVersion = "1.0.0";
private String street = "Knesebeckstraße";
private String streetNo = "1";
private String zipCode = "10623";
private String city = "Berlin";
private String addressAddition;
@JsonIgnore
public List<String> getAddressAdditionAsList() {
if (addressAddition != null) {
String[] split = addressAddition.split("\r\n|\n|\r");
return List.of(split);
}
return Collections.emptyList();
}
}
package de.ozgcloud.xta.test.app.model;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
import lombok.Builder;
@Builder
public record XtaCloseRequest(
@NotBlank String messageId,
@NotBlank String clientIdentifierValue
@ValidXtaMessageId String messageId,
@NotNull @NotBlank String clientIdentifierValue
) {
}
/*
* Created 2022-12-14
*/
package de.ozgcloud.xta.test.app.model;
import de.ozgcloud.xta.test.app.config.ClientProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class XtaConfigDto {
private ProtocolMetadata protocolMetadata;
private ClientProperties clientProperties;
}
......@@ -77,6 +77,8 @@ public class XtaConstants {
public static final String ERROR_CODE_MESSAGE_ID_UNKNOWN = "9070";
public static final String ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION = "MessageID für den Account nicht bekannt";
public static final String MESSAGE_ID_PATTERN = "(\\w+):(.+):([^:]+):([^:]+)";
public enum ConnectionPortType {
SEND, MSGBOX, MANAGEMENT
}
......
......@@ -2,11 +2,12 @@ package de.ozgcloud.xta.test.app.model;
import jakarta.validation.constraints.NotBlank;
import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
import lombok.Builder;
@Builder
public record XtaGetMessageRequest(
@NotBlank String messageId,
@ValidXtaMessageId String messageId,
@NotBlank String clientIdentifierValue
) {
}
package de.ozgcloud.xta.test.app.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class XtaIdentifierConfig {
private String identifierScheme;
private String name;
private String value;
private String organizationCategory;
}
package de.ozgcloud.xta.test.app.model;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
@Builder
public record XtaLookupServiceRequest(
String service,
String readerIdentifierValue,
String authorIdentifierValue
@NotNull @NotBlank String service,
@NotNull @NotBlank String readerIdentifierValue,
@NotNull @NotBlank String authorIdentifierValue
) {
}
......@@ -8,20 +8,21 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.PositiveOrZero;
import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
import lombok.Builder;
@Builder(toBuilder = true)
public record XtaMessageMetaData(
@NotBlank String service,
@NotNull @NotBlank String service,
@NotNull @NotBlank String businessScenarioCode,
@Nullable String businessScenarioName,
@Nullable String businessScenarioListUri,
@Nullable String businessScenarioListVersionId,
@NotBlank String messageTypeCode,
@NotBlank String messageTypePayloadSchema,
@NotBlank String messageId,
@ValidXtaMessageId String messageId,
@NotNull @Valid Identifier authorIdentifier,
@NotNull @Valid Identifier readerIdentifier,
@PositiveOrZero BigInteger messageSize
@NotNull @PositiveOrZero BigInteger messageSize
) {
}
package de.ozgcloud.xta.test.app.model;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import lombok.Builder;
@Builder
public record XtaMessageMetaDataListingRequest(
@NotBlank String clientIdentifierValue,
@Positive int maxListItems
@NotNull @NotBlank String clientIdentifierValue,
@NotNull @Positive int maxListItems
) {
}
......@@ -8,9 +8,9 @@ import org.springframework.stereotype.Component;
import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
import de.ozgcloud.xta.test.app.mapper.RequestMapper;
import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
import de.ozgcloud.xta.test.app.service.RequestValidator;
import de.ozgcloud.xta.test.app.service.XtaMessageService;
import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
import de.ozgcloud.xta.test.app.validation.RequestValidator;
import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
import genv3.de.xoev.transport.xta.x211.MsgBoxPortType;
import genv3.de.xoev.transport.xta.x211.PermissionDeniedException;
......
package de.ozgcloud.xta.test.app.service;
package de.ozgcloud.xta.test.app.validation;
import java.util.Collection;
import java.util.function.Function;
......
package de.ozgcloud.xta.test.app.validation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
@Constraint(validatedBy = XtaMessageIdValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER }) // Specify where the annotation can be applied
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidXtaMessageId {
String message() default "Invalid message id"; // Default error message
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package de.ozgcloud.xta.test.app.validation;
import static de.ozgcloud.xta.test.app.model.XtaConstants.*;
import java.util.regex.Pattern;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
public class XtaMessageIdValidator implements ConstraintValidator<ValidXtaMessageId, String> {
public Pattern PATTERN = Pattern.compile(MESSAGE_ID_PATTERN);
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
return value != null && PATTERN.matcher(value).matches();
}
}
......@@ -24,9 +24,9 @@ import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
import de.ozgcloud.xta.test.app.model.XtaMessage;
import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
import de.ozgcloud.xta.test.app.service.RequestValidator;
import de.ozgcloud.xta.test.app.service.XtaMessageService;
import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
import de.ozgcloud.xta.test.app.validation.RequestValidator;
import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
......
package de.ozgcloud.xta.test.app.validation;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
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 org.mockito.InjectMocks;
import org.mockito.Mock;
import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
import lombok.SneakyThrows;
class RequestValidatorTest {
@InjectMocks
private RequestValidator validator;
@Mock
private ExceptionMapper exceptionMapper;
@Mock
private XTAWSTechnicalProblemException exception;
@DisplayName("validate xta get message request")
@Nested
class TestValidateXtaGetMessageRequest {
@DisplayName("should return")
@Test
@SneakyThrows
void shouldReturn() {
validator.validate(XtaGetMessageRequestTestFactory.create());
}
@DisplayName("with invalid request")
@Nested
class TestWithInvalidRequest {
@BeforeEach
void mock() {
when(exceptionMapper.createTechnicalProblemException(any())).thenReturn(exception);
}
@DisplayName("should throw if message id is null")
@Test
void shouldThrowIfMessageIdIsNull() {
var request = XtaGetMessageRequestTestFactory.createBuilder()
.messageId(null)
.build();
assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
}
@DisplayName("should throw if message id does not match pattern")
@Test
void shouldThrowIfMessageIdDoesNotMatchPattern() {
var request = XtaGetMessageRequestTestFactory.createBuilder()
.messageId("urn:some-invalid-format")
.build();
assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
}
}
}
}
\ No newline at end of file
package de.ozgcloud.xta.test.app.validation;
import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
public class XtaGetMessageRequestTestFactory {
public static String VALID_MESSAGE_ID = "urn:de:xta:messageid:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16";
public static String VALID_CLIENT_IDENTIFIER_VALUE = "prefix:someValue";
public static XtaGetMessageRequest.XtaGetMessageRequestBuilder createBuilder() {
return XtaGetMessageRequest.builder()
.messageId(VALID_MESSAGE_ID)
.clientIdentifierValue(VALID_CLIENT_IDENTIFIER_VALUE);
}
public static XtaGetMessageRequest create() {
return createBuilder().build();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment