Skip to content
Snippets Groups Projects
Commit 226b0546 authored by Henry Borasch's avatar Henry Borasch
Browse files

added submission data validation for sender

* added loading of submission data schema
* added submission data validation to sender and subscriber flow
* added and adjusted tests and test data
* added attribute for skipping validations to config, fixed tests
parent 9356b7aa
No related branches found
No related tags found
2 merge requests!139928 - Validate Submission Data,!128Add Schema URI via Builder, check against existing destinations
Showing
with 99 additions and 54 deletions
...@@ -15,7 +15,6 @@ public enum SchemaConfig { ...@@ -15,7 +15,6 @@ public enum SchemaConfig {
SET_V_1_0_1(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.1/set-payload.schema.json"), "set_schema_1.0.1.json"), SET_V_1_0_1(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.1/set-payload.schema.json"), "set_schema_1.0.1.json"),
SET_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.0/set-payload.schema.json"), "set_schema_1.0.0.json"), SET_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("set-payload/1.0.0/set-payload.schema.json"), "set_schema_1.0.0.json"),
METADATA_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("metadata/1.0.0/metadata.schema.json"), "metadata_schema_1.0.0.json"), METADATA_V_1_0_0(SCHEMA_BASE_URL.schemaUri.resolve("metadata/1.0.0/metadata.schema.json"), "metadata_schema_1.0.0.json"),
XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json"); XZUFI_DESTINATION_SCHEMA(SCHEMA_BASE_URL.schemaUri.resolve("xzufi/destination.schema.json"), "destination_schema.json");
private final URI schemaUri; private final URI schemaUri;
...@@ -50,6 +49,12 @@ public enum SchemaConfig { ...@@ -50,6 +49,12 @@ public enum SchemaConfig {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public static List<String> getSubmissionDataSchemaPaths(final String submissionDataSchemaBaseDir) {
return Stream.empty()
.map(fileName -> submissionDataSchemaBaseDir + "/" + fileName)
.collect(Collectors.toList());
}
@Override @Override
public String toString() { public String toString() {
return schemaUri.toString(); return schemaUri.toString();
......
...@@ -10,4 +10,5 @@ public class SchemaResources { ...@@ -10,4 +10,5 @@ public class SchemaResources {
List<String> setSchemaPaths; List<String> setSchemaPaths;
List<String> metadataSchemaPaths; List<String> metadataSchemaPaths;
List<String> destinationSchemaPaths; List<String> destinationSchemaPaths;
List<String> submissionDataSchemaPaths;
} }
...@@ -12,6 +12,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.*; ...@@ -12,6 +12,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.*;
import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
import dev.fitko.fitconnect.api.exceptions.*; import dev.fitko.fitconnect.api.exceptions.*;
import java.net.URI;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
...@@ -140,10 +141,11 @@ public interface Sender { ...@@ -140,10 +141,11 @@ public interface Sender {
* Tests if a given string is well-formed JSON syntax. * Tests if a given string is well-formed JSON syntax.
* *
* @param json json string that is tested * @param json json string that is tested
* @param schemaUri URI of schema to validate against
* *
* @return a {@link ValidationResult} with an optional error * @return a {@link ValidationResult} with an optional error
*/ */
ValidationResult validateJsonFormat(SubmissionPayload json); ValidationResult validateJsonFormat(String json, URI schemaUri);
/** /**
* Tests if a given string is well-formed XML syntax. * Tests if a given string is well-formed XML syntax.
......
...@@ -4,6 +4,7 @@ import com.nimbusds.jose.jwk.RSAKey; ...@@ -4,6 +4,7 @@ import com.nimbusds.jose.jwk.RSAKey;
import dev.fitko.fitconnect.api.domain.model.metadata.Metadata; import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
import java.net.URI;
import java.util.Map; import java.util.Map;
/** /**
...@@ -77,10 +78,11 @@ public interface ValidationService { ...@@ -77,10 +78,11 @@ public interface ValidationService {
* Tests if a given string is well-formed JSON syntax. * Tests if a given string is well-formed JSON syntax.
* *
* @param json json string that is tested * @param json json string that is tested
* @param schemaUri URI of schema to validate against
* *
* @return a {@link ValidationResult} with an optional error * @return a {@link ValidationResult} with an optional error
*/ */
ValidationResult validateJsonFormat(String json); ValidationResult validateJsonFormat(String json, URI schemaUri);
/** /**
* Tests if a given string is well-formed XML syntax. * Tests if a given string is well-formed XML syntax.
......
...@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission; ...@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission;
import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
import dev.fitko.fitconnect.api.services.Sender; import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload; import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.client.sender.strategies.SendEncryptedSubmissionStrategy; import dev.fitko.fitconnect.client.sender.strategies.SendEncryptedSubmissionStrategy;
import dev.fitko.fitconnect.client.sender.strategies.SendNewSubmissionStrategy; import dev.fitko.fitconnect.client.sender.strategies.SendNewSubmissionStrategy;
import dev.fitko.fitconnect.client.util.ValidDataGuard; import dev.fitko.fitconnect.client.util.ValidDataGuard;
......
...@@ -10,7 +10,7 @@ import dev.fitko.fitconnect.client.cli.batch.ImportRecord; ...@@ -10,7 +10,7 @@ import dev.fitko.fitconnect.client.cli.batch.ImportRecord;
import dev.fitko.fitconnect.client.cli.commands.*; import dev.fitko.fitconnect.client.cli.commands.*;
import dev.fitko.fitconnect.client.cli.util.AttachmentDataType; import dev.fitko.fitconnect.client.cli.util.AttachmentDataType;
import dev.fitko.fitconnect.client.sender.SubmissionBuilder; import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission; import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission;
import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment; import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment;
import dev.fitko.fitconnect.core.util.StopWatch; import dev.fitko.fitconnect.core.util.StopWatch;
......
...@@ -59,9 +59,9 @@ public final class ClientFactory { ...@@ -59,9 +59,9 @@ public final class ClientFactory {
private static final String CONFIG_ENV_KEY_NAME = "FIT_CONNECT_CONFIG"; private static final String CONFIG_ENV_KEY_NAME = "FIT_CONNECT_CONFIG";
private static final String SET_SCHEMA_DIR = "/set-schema"; private static final String SET_SCHEMA_DIR = "/set-schema";
private static final String DESTINATION_SCHEMA_DIR = "/destination-schema"; private static final String DESTINATION_SCHEMA_DIR = "/destination-schema";
private static final String METADATA_SCHEMA_DIR = "/metadata-schema"; private static final String METADATA_SCHEMA_DIR = "/metadata-schema";
private static final String SUBMISSION_DATA_SCHEMA_DIR = "/submission-data-schema";
private ClientFactory() { private ClientFactory() {
} }
...@@ -129,7 +129,7 @@ public final class ClientFactory { ...@@ -129,7 +129,7 @@ public final class ClientFactory {
public static RoutingClient routingClient(final ApplicationConfig config) { public static RoutingClient routingClient(final ApplicationConfig config) {
LOGGER.info("Initializing routing client ..."); LOGGER.info("Initializing routing client ...");
final RestTemplate restTemplate = getRestTemplate(config, ApplicationConfigLoader.loadBuildInfo()); final RestTemplate restTemplate = getRestTemplate(config, ApplicationConfigLoader.loadBuildInfo());
final SchemaProvider schemaProvider = getSchemaProvider(); final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final OAuthService authService = getSenderConfiguredAuthService(config, restTemplate); final OAuthService authService = getSenderConfiguredAuthService(config, restTemplate);
final MessageDigestService messageDigestService = getMessageDigestService(); final MessageDigestService messageDigestService = getMessageDigestService();
...@@ -145,7 +145,7 @@ public final class ClientFactory { ...@@ -145,7 +145,7 @@ public final class ClientFactory {
private static Sender getSender(final ApplicationConfig config, final BuildInfo buildInfo) { private static Sender getSender(final ApplicationConfig config, final BuildInfo buildInfo) {
final RestTemplate restTemplate = getRestTemplate(config, buildInfo); final RestTemplate restTemplate = getRestTemplate(config, buildInfo);
final SchemaProvider schemaProvider = getSchemaProvider(); final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final MessageDigestService messageDigestService = getMessageDigestService(); final MessageDigestService messageDigestService = getMessageDigestService();
final CryptoService cryptoService = getCryptoService(messageDigestService); final CryptoService cryptoService = getCryptoService(messageDigestService);
...@@ -162,7 +162,7 @@ public final class ClientFactory { ...@@ -162,7 +162,7 @@ public final class ClientFactory {
private static Subscriber getSubscriber(final ApplicationConfig config, final BuildInfo buildInfo) { private static Subscriber getSubscriber(final ApplicationConfig config, final BuildInfo buildInfo) {
final RestTemplate restTemplate = getRestTemplate(config, buildInfo); final RestTemplate restTemplate = getRestTemplate(config, buildInfo);
final SchemaProvider schemaProvider = getSchemaProvider(); final SchemaProvider schemaProvider = getSchemaProvider(restTemplate);
final MessageDigestService messageDigestService = getMessageDigestService(); final MessageDigestService messageDigestService = getMessageDigestService();
final CryptoService cryptoService = getCryptoService(messageDigestService); final CryptoService cryptoService = getCryptoService(messageDigestService);
...@@ -231,12 +231,13 @@ public final class ClientFactory { ...@@ -231,12 +231,13 @@ public final class ClientFactory {
return new EventLogVerifier(keyService, validationService); return new EventLogVerifier(keyService, validationService);
} }
private static SchemaProvider getSchemaProvider() { private static SchemaProvider getSchemaProvider(RestTemplate restTemplate) {
final List<String> setSchemaFiles = SchemaConfig.getSetSchemaFilePaths(SET_SCHEMA_DIR); final List<String> setSchemaFiles = SchemaConfig.getSetSchemaFilePaths(SET_SCHEMA_DIR);
final List<String> metadataSchemaFiles = SchemaConfig.getMetadataSchemaFileNames(METADATA_SCHEMA_DIR); final List<String> metadataSchemaFiles = SchemaConfig.getMetadataSchemaFileNames(METADATA_SCHEMA_DIR);
final List<String> destinationSchemaFiles = SchemaConfig.getDestinationSchemaPaths(DESTINATION_SCHEMA_DIR); final List<String> destinationSchemaFiles = SchemaConfig.getDestinationSchemaPaths(DESTINATION_SCHEMA_DIR);
final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles); final List<String> submissionDataSchemaFiles = SchemaConfig.getSubmissionDataSchemaPaths(SUBMISSION_DATA_SCHEMA_DIR);
return new SchemaResourceProvider(schemaResources); final SchemaResources schemaResources = new SchemaResources(setSchemaFiles, metadataSchemaFiles, destinationSchemaFiles, submissionDataSchemaFiles);
return new SchemaResourceProvider(restTemplate, schemaResources);
} }
private static RoutingService getRoutingService(final ApplicationConfig config, final RestTemplate restTemplate) { private static RoutingService getRoutingService(final ApplicationConfig config, final RestTemplate restTemplate) {
......
...@@ -2,7 +2,7 @@ package dev.fitko.fitconnect.client.sender; ...@@ -2,7 +2,7 @@ package dev.fitko.fitconnect.client.sender;
import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType; import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
import dev.fitko.fitconnect.api.domain.model.submission.ServiceType; import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.client.sender.steps.*; import dev.fitko.fitconnect.client.sender.steps.*;
import lombok.Getter; import lombok.Getter;
import org.slf4j.Logger; import org.slf4j.Logger;
......
package dev.fitko.fitconnect.api.domain.model.submission; package dev.fitko.fitconnect.client.sender.model;
import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType; import dev.fitko.fitconnect.api.domain.model.metadata.data.MimeType;
import dev.fitko.fitconnect.api.domain.model.submission.ServiceType; import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
......
package dev.fitko.fitconnect.client.sender.steps; package dev.fitko.fitconnect.client.sender.steps;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
public interface BuildStep { public interface BuildStep {
......
...@@ -2,6 +2,7 @@ package dev.fitko.fitconnect.client.sender.strategies; ...@@ -2,6 +2,7 @@ package dev.fitko.fitconnect.client.sender.strategies;
import com.nimbusds.jose.jwk.RSAKey; import com.nimbusds.jose.jwk.RSAKey;
import dev.fitko.fitconnect.api.domain.model.destination.Destination; import dev.fitko.fitconnect.api.domain.model.destination.Destination;
import dev.fitko.fitconnect.api.domain.model.destination.DestinationService;
import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure; import dev.fitko.fitconnect.api.domain.model.metadata.ContentStructure;
import dev.fitko.fitconnect.api.domain.model.metadata.Hash; import dev.fitko.fitconnect.api.domain.model.metadata.Hash;
import dev.fitko.fitconnect.api.domain.model.metadata.Metadata; import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
...@@ -27,7 +28,7 @@ import dev.fitko.fitconnect.api.exceptions.SchemaNotFoundException; ...@@ -27,7 +28,7 @@ import dev.fitko.fitconnect.api.exceptions.SchemaNotFoundException;
import dev.fitko.fitconnect.api.exceptions.SubmissionNotCreatedException; import dev.fitko.fitconnect.api.exceptions.SubmissionNotCreatedException;
import dev.fitko.fitconnect.api.services.Sender; import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.client.sender.model.AttachmentPayload; import dev.fitko.fitconnect.client.sender.model.AttachmentPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.core.util.StopWatch; import dev.fitko.fitconnect.core.util.StopWatch;
import org.apache.tika.Tika; import org.apache.tika.Tika;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -40,6 +41,7 @@ import java.net.URLConnection; ...@@ -40,6 +41,7 @@ import java.net.URLConnection;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
......
...@@ -7,7 +7,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.ServiceType; ...@@ -7,7 +7,7 @@ import dev.fitko.fitconnect.api.domain.model.submission.ServiceType;
import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
import dev.fitko.fitconnect.api.services.Sender; import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload; import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import java.net.URI; import java.net.URI;
import java.util.Objects; import java.util.Objects;
...@@ -136,7 +136,7 @@ public class ValidDataGuard { ...@@ -136,7 +136,7 @@ public class ValidDataGuard {
} }
private void checkJsonFormat(final SubmissionPayload submissionPayload) { private void checkJsonFormat(final SubmissionPayload submissionPayload) {
final ValidationResult validationResult = sender.validateJsonFormat(submissionPayload.getData()); final ValidationResult validationResult = sender.validateJsonFormat(submissionPayload.getData(), submissionPayload.getSchemaUri());
if (validationResult.hasError()) { if (validationResult.hasError()) {
throw new IllegalArgumentException("Data is not in expected json format, please provide valid json: " + validationResult.getError().getMessage()); throw new IllegalArgumentException("Data is not in expected json format, please provide valid json: " + validationResult.getError().getMessage());
} }
......
...@@ -23,7 +23,7 @@ import dev.fitko.fitconnect.api.services.Sender; ...@@ -23,7 +23,7 @@ import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder; import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder;
import dev.fitko.fitconnect.client.sender.SubmissionBuilder; import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload; import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.client.testutil.LogCaptor; import dev.fitko.fitconnect.client.testutil.LogCaptor;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
...@@ -77,7 +77,7 @@ public class SenderClientTest { ...@@ -77,7 +77,7 @@ public class SenderClientTest {
when(senderMock.sendSubmission(any())).thenReturn(expectedSubmission); when(senderMock.sendSubmission(any())).thenReturn(expectedSubmission);
when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok()); when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok());
when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey); when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok());
...@@ -182,7 +182,7 @@ public class SenderClientTest { ...@@ -182,7 +182,7 @@ public class SenderClientTest {
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.createSubmission(any())).thenReturn(announcedSubmission); when(senderMock.createSubmission(any())).thenReturn(announcedSubmission);
when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok()); when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok());
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey); when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
// When // When
...@@ -513,7 +513,7 @@ public class SenderClientTest { ...@@ -513,7 +513,7 @@ public class SenderClientTest {
when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey); when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok());
when(senderMock.validateXmlFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateXmlFormat(any())).thenReturn(ValidationResult.ok());
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
when(senderMock.sendSubmission(any())).thenReturn(new Submission()); when(senderMock.sendSubmission(any())).thenReturn(new Submission());
return destinationId; return destinationId;
......
...@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.client.SubscriberClient; ...@@ -11,7 +11,7 @@ import dev.fitko.fitconnect.client.SubscriberClient;
import dev.fitko.fitconnect.client.cli.batch.CsvImporter; import dev.fitko.fitconnect.client.cli.batch.CsvImporter;
import dev.fitko.fitconnect.client.cli.batch.ImportRecord; import dev.fitko.fitconnect.client.cli.batch.ImportRecord;
import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload; import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission; import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission;
import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment; import dev.fitko.fitconnect.client.subscriber.model.ReceivedAttachment;
import dev.fitko.fitconnect.client.subscriber.model.ReceivedData; import dev.fitko.fitconnect.client.subscriber.model.ReceivedData;
......
...@@ -9,7 +9,7 @@ import dev.fitko.fitconnect.api.services.Sender; ...@@ -9,7 +9,7 @@ import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder; import dev.fitko.fitconnect.client.sender.EncryptedSubmissionBuilder;
import dev.fitko.fitconnect.client.sender.SubmissionBuilder; import dev.fitko.fitconnect.client.sender.SubmissionBuilder;
import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload; import dev.fitko.fitconnect.client.sender.model.EncryptedSubmissionPayload;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionPayload; import dev.fitko.fitconnect.client.sender.model.SubmissionPayload;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -56,7 +56,7 @@ class ValidDataGuardTest { ...@@ -56,7 +56,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("\"test\": \"json\"", .withJsonData("\"test\": \"json\"",
...@@ -107,7 +107,7 @@ class ValidDataGuardTest { ...@@ -107,7 +107,7 @@ class ValidDataGuardTest {
void testMissingDestinationId() { void testMissingDestinationId() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("{}", URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")) .withJsonData("{}", URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
...@@ -126,7 +126,7 @@ class ValidDataGuardTest { ...@@ -126,7 +126,7 @@ class ValidDataGuardTest {
void testInvalidServiceIdentifier() { void testInvalidServiceIdentifier() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("{\"test\" . \"data\"}", .withJsonData("{\"test\" . \"data\"}",
...@@ -145,7 +145,7 @@ class ValidDataGuardTest { ...@@ -145,7 +145,7 @@ class ValidDataGuardTest {
void testMissingServiceIdentifier() { void testMissingServiceIdentifier() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("{\"test\" . \"data\"}", .withJsonData("{\"test\" . \"data\"}",
...@@ -171,7 +171,7 @@ class ValidDataGuardTest { ...@@ -171,7 +171,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("\"test\": \"json\"", .withJsonData("\"test\": \"json\"",
...@@ -202,7 +202,7 @@ class ValidDataGuardTest { ...@@ -202,7 +202,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("\"test\": \"json\"", .withJsonData("\"test\": \"json\"",
...@@ -234,7 +234,7 @@ class ValidDataGuardTest { ...@@ -234,7 +234,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final SubmissionPayload submissionPayload = SubmissionBuilder.Builder() final SubmissionPayload submissionPayload = SubmissionBuilder.Builder()
.withJsonData("\"test\": \"json\"", .withJsonData("\"test\": \"json\"",
...@@ -268,7 +268,7 @@ class ValidDataGuardTest { ...@@ -268,7 +268,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder() final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder()
.withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF") .withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF")
...@@ -321,7 +321,7 @@ class ValidDataGuardTest { ...@@ -321,7 +321,7 @@ class ValidDataGuardTest {
void testMissingDestinationId() { void testMissingDestinationId() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder() final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder()
.withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF") .withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF")
...@@ -341,7 +341,7 @@ class ValidDataGuardTest { ...@@ -341,7 +341,7 @@ class ValidDataGuardTest {
void testInvalidServiceIdentifier() { void testInvalidServiceIdentifier() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder() final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder()
.withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF") .withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF")
...@@ -361,7 +361,7 @@ class ValidDataGuardTest { ...@@ -361,7 +361,7 @@ class ValidDataGuardTest {
void testMissingServiceIdentifier() { void testMissingServiceIdentifier() {
// Given // Given
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder() final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder()
.withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF") .withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF")
...@@ -387,7 +387,7 @@ class ValidDataGuardTest { ...@@ -387,7 +387,7 @@ class ValidDataGuardTest {
destination.setServices(Set.of(service)); destination.setServices(Set.of(service));
when(senderMock.getDestination(any())).thenReturn(destination); when(senderMock.getDestination(any())).thenReturn(destination);
when(senderMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder() final EncryptedSubmissionPayload encryptedSubmissionPayload = EncryptedSubmissionBuilder.Builder()
.withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF") .withEncryptedData("4Y0sJhadfrQnNZXeS7Pqh73FvtF")
......
...@@ -6,7 +6,10 @@ import dev.fitko.fitconnect.api.domain.model.event.EventLogEntry; ...@@ -6,7 +6,10 @@ import dev.fitko.fitconnect.api.domain.model.event.EventLogEntry;
import dev.fitko.fitconnect.api.domain.model.event.EventStatus; import dev.fitko.fitconnect.api.domain.model.event.EventStatus;
import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags; import dev.fitko.fitconnect.api.domain.model.event.authtags.AuthenticationTags;
import dev.fitko.fitconnect.api.domain.model.metadata.Metadata; import dev.fitko.fitconnect.api.domain.model.metadata.Metadata;
import dev.fitko.fitconnect.api.domain.model.submission.*; import dev.fitko.fitconnect.api.domain.model.submission.CreateSubmission;
import dev.fitko.fitconnect.api.domain.model.submission.Submission;
import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup;
import dev.fitko.fitconnect.api.domain.model.submission.SubmitSubmission;
import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import dev.fitko.fitconnect.api.domain.validation.ValidationResult;
import dev.fitko.fitconnect.api.services.Sender; import dev.fitko.fitconnect.api.services.Sender;
import dev.fitko.fitconnect.api.services.crypto.CryptoService; import dev.fitko.fitconnect.api.services.crypto.CryptoService;
...@@ -17,6 +20,7 @@ import dev.fitko.fitconnect.api.services.validation.ValidationService; ...@@ -17,6 +20,7 @@ import dev.fitko.fitconnect.api.services.validation.ValidationService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.net.URI;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
...@@ -112,9 +116,9 @@ public class SubmissionSender implements Sender { ...@@ -112,9 +116,9 @@ public class SubmissionSender implements Sender {
} }
@Override @Override
public ValidationResult validateJsonFormat(final SubmissionPayload json) { public ValidationResult validateJsonFormat(final String json, final URI schemaUri) {
LOGGER.info("Validating data json format"); LOGGER.info("Validating data json format");
return validationService.validateJsonFormat(json); return validationService.validateJsonFormat(json, schemaUri);
} }
@Override @Override
......
...@@ -9,6 +9,7 @@ import dev.fitko.fitconnect.api.exceptions.SchemaNotFoundException; ...@@ -9,6 +9,7 @@ import dev.fitko.fitconnect.api.exceptions.SchemaNotFoundException;
import dev.fitko.fitconnect.api.services.schema.SchemaProvider; import dev.fitko.fitconnect.api.services.schema.SchemaProvider;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.web.client.RestTemplate;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
...@@ -32,15 +33,22 @@ public class SchemaResourceProvider implements SchemaProvider { ...@@ -32,15 +33,22 @@ public class SchemaResourceProvider implements SchemaProvider {
private final Map<URI, String> destinationSchemas; private final Map<URI, String> destinationSchemas;
private final Map<URI, String> submissionDataSchemas;
private final RestTemplate restTemplate;
private static final ObjectMapper MAPPER = new ObjectMapper(); private static final ObjectMapper MAPPER = new ObjectMapper();
public SchemaResourceProvider(final SchemaResources schemaResources) { public SchemaResourceProvider(final RestTemplate restTemplate, final SchemaResources schemaResources) {
setSchemas = new HashMap<>(); setSchemas = new HashMap<>();
metadataSchemas = new HashMap<>(); metadataSchemas = new HashMap<>();
destinationSchemas = new HashMap<>(); destinationSchemas = new HashMap<>();
submissionDataSchemas = new HashMap<>();
this.restTemplate = restTemplate;
populateSetSchemas(schemaResources.getSetSchemaPaths()); populateSetSchemas(schemaResources.getSetSchemaPaths());
populateMetadataSchemas(schemaResources.getMetadataSchemaPaths()); populateMetadataSchemas(schemaResources.getMetadataSchemaPaths());
populateDestinationSchemas(schemaResources.getDestinationSchemaPaths()); populateDestinationSchemas(schemaResources.getDestinationSchemaPaths());
populateSubmissionDataSchemas(schemaResources.getSubmissionDataSchemaPaths());
} }
private void populateMetadataSchemas(final List<String> metadataSchemaPaths) { private void populateMetadataSchemas(final List<String> metadataSchemaPaths) {
...@@ -58,6 +66,11 @@ public class SchemaResourceProvider implements SchemaProvider { ...@@ -58,6 +66,11 @@ public class SchemaResourceProvider implements SchemaProvider {
getResourceFiles(destinationSchemaPaths).forEach(this::addDestinationSchema); getResourceFiles(destinationSchemaPaths).forEach(this::addDestinationSchema);
} }
private void populateSubmissionDataSchemas(final List<String> submissionDataSchemaPaths) {
LOGGER.info("Initializing submission data schemas");
getResourceFiles(submissionDataSchemaPaths).forEach(this::addSubmissionDataSchema);
}
@Override @Override
public boolean isAllowedSetSchema(final URI schemaUri) { public boolean isAllowedSetSchema(final URI schemaUri) {
return schemaVersionMatchesPattern(schemaUri, ALLOWED_SCHEMA_PATTERN); return schemaVersionMatchesPattern(schemaUri, ALLOWED_SCHEMA_PATTERN);
...@@ -99,14 +112,19 @@ public class SchemaResourceProvider implements SchemaProvider { ...@@ -99,14 +112,19 @@ public class SchemaResourceProvider implements SchemaProvider {
@Override @Override
public String loadSubmissionDataSchema(final URI schemaUri) throws SchemaNotFoundException { public String loadSubmissionDataSchema(final URI schemaUri) throws SchemaNotFoundException {
String schema; if (schemaUri.toString().matches("http.+")) {
if(schemaUri.toString().matches("http.+")) { try {
schema = "load schema from remote"; return restTemplate.getForEntity(schemaUri, String.class).getBody();
} catch (Exception exception) {
throw new SchemaNotFoundException("Submission data schema " + schemaUri + " is not available.", exception);
}
} }
schema = destinationSchemas.get(schemaUri);
final String schema = submissionDataSchemas.get(schemaUri);
if (schema == null) { if (schema == null) {
throw new SchemaNotFoundException("Destination schema " + schemaUri.toString() + " is not available."); throw new SchemaNotFoundException("Submission data schema " + schemaUri + " is not available.");
} }
return schema; return schema;
} }
...@@ -122,6 +140,10 @@ public class SchemaResourceProvider implements SchemaProvider { ...@@ -122,6 +140,10 @@ public class SchemaResourceProvider implements SchemaProvider {
destinationSchemas.put(readIdFromSchema(schema), schema); destinationSchemas.put(readIdFromSchema(schema), schema);
} }
private void addSubmissionDataSchema(final String schema) {
submissionDataSchemas.put(readIdFromSchema(schema), schema);
}
private URI readIdFromSchema(final String schema) { private URI readIdFromSchema(final String schema) {
try { try {
return URI.create(MAPPER.readTree(schema).get("$id").asText()); return URI.create(MAPPER.readTree(schema).get("$id").asText());
......
...@@ -33,7 +33,6 @@ import org.xml.sax.XMLReader; ...@@ -33,7 +33,6 @@ import org.xml.sax.XMLReader;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParserFactory;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
...@@ -152,9 +151,11 @@ public class DefaultValidationService implements ValidationService { ...@@ -152,9 +151,11 @@ public class DefaultValidationService implements ValidationService {
} }
@Override @Override
public ValidationResult validateJsonFormat(final String json) { public ValidationResult validateJsonFormat(final String json, final URI schemaUri) {
String schema = schemaProvider.loadSubmissionDataSchema(schemaUri);
try { try {
MAPPER.readTree(json); returnValidationResult(SCHEMA_FACTORY_DRAFT_2007.getSchema(schema).validate(MAPPER.readTree(json)));
} catch (final JacksonException e) { } catch (final JacksonException e) {
return ValidationResult.error(e); return ValidationResult.error(e);
} }
......
...@@ -37,6 +37,7 @@ import org.junit.jupiter.api.BeforeEach; ...@@ -37,6 +37,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.io.IOException; import java.io.IOException;
import java.net.URI;
import java.text.ParseException; import java.text.ParseException;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
...@@ -54,6 +55,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; ...@@ -54,6 +55,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
...@@ -331,10 +333,10 @@ public class SubmissionSenderTest { ...@@ -331,10 +333,10 @@ public class SubmissionSenderTest {
void testValidJsonFormatValidation() { void testValidJsonFormatValidation() {
// Given // Given
when(validationServiceMock.validateJsonFormat(any())).thenReturn(ValidationResult.ok()); when(validationServiceMock.validateJsonFormat(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.ok());
// When // When
final ValidationResult validationResult = underTest.validateJsonFormat("{}"); final ValidationResult validationResult = underTest.validateJsonFormat("{}", URI.create("urn:something"));
//Then //Then
assertTrue(validationResult.isValid()); assertTrue(validationResult.isValid());
...@@ -344,10 +346,10 @@ public class SubmissionSenderTest { ...@@ -344,10 +346,10 @@ public class SubmissionSenderTest {
void testInvalidJsonFormatValidation() { void testInvalidJsonFormatValidation() {
// Given // Given
when(validationServiceMock.validateJsonFormat(any())).thenReturn(ValidationResult.error(new ValidationException("Invalid json"))); when(validationServiceMock.validateJsonFormat(any(), eq(URI.create("urn:something")))).thenReturn(ValidationResult.error(new ValidationException("Invalid json")));
// When // When
final ValidationResult validationResult = underTest.validateJsonFormat("$%&/()"); final ValidationResult validationResult = underTest.validateJsonFormat("$%&/()", URI.create("urn:something"));
//Then //Then
assertTrue(validationResult.hasError()); assertTrue(validationResult.hasError());
......
...@@ -27,6 +27,7 @@ import dev.fitko.fitconnect.core.schema.SchemaResourceProvider; ...@@ -27,6 +27,7 @@ import dev.fitko.fitconnect.core.schema.SchemaResourceProvider;
import dev.fitko.fitconnect.core.validation.DefaultValidationService; import dev.fitko.fitconnect.core.validation.DefaultValidationService;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.web.client.RestTemplate;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
...@@ -41,6 +42,7 @@ import static org.hamcrest.MatcherAssert.assertThat; ...@@ -41,6 +42,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
class SecurityEventTokenServiceTest { class SecurityEventTokenServiceTest {
...@@ -61,8 +63,9 @@ class SecurityEventTokenServiceTest { ...@@ -61,8 +63,9 @@ class SecurityEventTokenServiceTest {
final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema"); final List<String> setSchemas = SchemaConfig.getSetSchemaFilePaths("/set-schema");
final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema"); final List<String> metadataSchemas = SchemaConfig.getMetadataSchemaFileNames("/metadata-schema");
final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema"); final List<String> destinationSchemas = SchemaConfig.getDestinationSchemaPaths("/destination-schema");
final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas); final List<String> submissionDataSchemas = SchemaConfig.getSubmissionDataSchemaPaths("/submission-data-schema");
final SchemaProvider schemaProvider = new SchemaResourceProvider(schemaResources); final SchemaResources schemaResources = new SchemaResources(setSchemas, metadataSchemas, destinationSchemas, submissionDataSchemas);
final SchemaProvider schemaProvider = new SchemaResourceProvider(mock(RestTemplate.class), schemaResources);
validationService = new DefaultValidationService(config, new HashService(), schemaProvider); validationService = new DefaultValidationService(config, new HashService(), schemaProvider);
underTest = new SecurityEventTokenService(config, validationService, signingKey); underTest = new SecurityEventTokenService(config, validationService, signingKey);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment