diff --git a/pom.xml b/pom.xml index 6c353a483..1044b01c4 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,8 @@ org.springframework.boot spring-boot-starter-parent - 3.5.15 + 4.1.0 + org.fairdatateam @@ -54,12 +55,12 @@ 21 - 2.0.0 - 0.2.0 - 6.0.4 + 2.0.1 + 0.2.2 + 6.0.5 - 2.8.16 + 3.0.3 5.5.1 5.3.1 0.13.0 @@ -127,9 +128,10 @@ + org.springframework.boot - spring-boot-starter-web + spring-boot-starter-actuator @@ -140,40 +142,75 @@ org.springframework.boot - spring-boot-starter-security + spring-boot-starter-aspectj org.springframework.boot - spring-boot-starter-log4j2 + spring-boot-starter-jackson org.springframework.boot - spring-boot-configuration-processor + spring-boot-starter-log4j2 org.springframework.boot spring-boot-starter-data-mongodb - org.springframework.security - spring-security-acl + org.springframework.boot + spring-boot-starter-data-mongodb-test + test org.springframework.boot - spring-boot-starter-actuator + spring-boot-starter-restclient + + + org.springframework.boot + spring-boot-starter-restclient-test + test + + org.springframework.boot - spring-boot-starter-aop + spring-boot-resttestclient + test + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-security-test + test + + + org.springframework.boot spring-boot-starter-validation + + org.springframework.boot + spring-boot-starter-validation-test + test + + + org.springframework.boot + spring-boot-starter-webmvc + + + org.springframework.boot + spring-boot-starter-webmvc-test + test + + + io.mongock mongock-springboot @@ -182,10 +219,6 @@ io.mongock mongodb-springdata-v4-driver - - org.springframework.data - spring-data-mongodb - @@ -238,30 +271,19 @@ org.projectlombok lombok - - - - - org.springframework.boot - spring-boot-starter-test - test - - - com.vaadin.external.google - android-json - - + org.apache.httpcomponents.client5 + httpclient5 - org.springframework.security - spring-security-test - test + jakarta.servlet + jakarta.servlet-api - org.apache.httpcomponents.client5 - httpclient5 + org.slf4j + slf4j-api + diff --git a/src/main/java/org/fairdatateam/fairdatapoint/api/dto/schema/MetadataSchemaDraftDTO.java b/src/main/java/org/fairdatateam/fairdatapoint/api/dto/schema/MetadataSchemaDraftDTO.java index b88fe4e12..ed2f28bc7 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/api/dto/schema/MetadataSchemaDraftDTO.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/api/dto/schema/MetadataSchemaDraftDTO.java @@ -22,6 +22,7 @@ */ package org.fairdatateam.fairdatapoint.api.dto.schema; +import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonInclude; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -29,7 +30,6 @@ import java.util.List; -@NoArgsConstructor @AllArgsConstructor @Getter @Setter @@ -47,7 +47,7 @@ public class MetadataSchemaDraftDTO { @NotNull private String description; - private boolean abstractSchema; + private Boolean abstractSchema; @NotNull private String definition; @@ -63,4 +63,13 @@ public class MetadataSchemaDraftDTO { @JsonInclude(JsonInclude.Include.ALWAYS) private String lastVersion; + + /** + * No-args constructor explicitly marked as default for JSON creation. + * See + * FasterXML/jackson-databind#5318 for more info. + */ + @JsonCreator + public MetadataSchemaDraftDTO() { + } } diff --git a/src/main/java/org/fairdatateam/fairdatapoint/api/filter/JwtTokenFilter.java b/src/main/java/org/fairdatateam/fairdatapoint/api/filter/JwtTokenFilter.java index d67337909..cdf29a98f 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/api/filter/JwtTokenFilter.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/api/filter/JwtTokenFilter.java @@ -22,7 +22,6 @@ */ package org.fairdatateam.fairdatapoint.api.filter; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -38,6 +37,7 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; @@ -53,7 +53,7 @@ public class JwtTokenFilter extends OncePerRequestFilter { private ApiKeyService apiKeyService; @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Override public void doFilterInternal( @@ -69,7 +69,7 @@ public void doFilterInternal( response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setContentType(MediaType.APPLICATION_JSON.toString()); final ErrorDTO error = new ErrorDTO(HttpStatus.UNAUTHORIZED, "You have to be log in"); - objectMapper.writeValue(response.getWriter(), error); + jsonMapper.writeValue(response.getWriter(), error); } } diff --git a/src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorMetricsConfig.java b/src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorMetricsConfig.java index 607da14c4..49c5d68eb 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorMetricsConfig.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorMetricsConfig.java @@ -26,7 +26,7 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.config.MeterFilter; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; +import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/org/fairdatateam/fairdatapoint/config/HttpClientConfig.java b/src/main/java/org/fairdatateam/fairdatapoint/config/HttpClientConfig.java index 30edebda9..c072e4bda 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/config/HttpClientConfig.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/config/HttpClientConfig.java @@ -22,7 +22,7 @@ */ package org.fairdatateam.fairdatapoint.config; -import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.restclient.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestClient; @@ -45,9 +45,8 @@ public class HttpClientConfig { @Bean public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { return restTemplateBuilder - // todo: these are deprecated, but we should replace RestTemplate by RestClient anyway - .setConnectTimeout(TIMEOUT) - .setReadTimeout(TIMEOUT) + .connectTimeout(TIMEOUT) + .readTimeout(TIMEOUT) .build(); } diff --git a/src/main/java/org/fairdatateam/fairdatapoint/config/SecurityConfig.java b/src/main/java/org/fairdatateam/fairdatapoint/config/SecurityConfig.java index e87bbcddd..deabdb5e8 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/config/SecurityConfig.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/config/SecurityConfig.java @@ -23,7 +23,7 @@ package org.fairdatateam.fairdatapoint.config; import org.fairdatateam.fairdatapoint.api.filter.FilterConfigurer; -import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest; +import org.springframework.boot.security.autoconfigure.actuate.web.servlet.EndpointRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/fairdatateam/fairdatapoint/config/WebMvcConfig.java b/src/main/java/org/fairdatateam/fairdatapoint/config/WebMvcConfig.java index 7319dda16..26f4f9dc0 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/config/WebMvcConfig.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/config/WebMvcConfig.java @@ -22,48 +22,58 @@ */ package org.fairdatateam.fairdatapoint.config; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.annotation.JsonInclude; import org.fairdatateam.fairdatapoint.api.converter.ErrorConverter; import org.fairdatateam.fairdatapoint.api.converter.RdfConverter; -import org.springframework.beans.factory.annotation.Autowired; +import org.jspecify.annotations.NonNull; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.HttpHeaders; import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverters; import org.springframework.http.converter.StringHttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.view.InternalResourceViewResolver; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.json.JsonMapper; import java.util.List; -import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; - @Configuration public class WebMvcConfig implements WebMvcConfigurer { - @Autowired - private List errorConverters; + private final List errorConverters; - @Autowired - private List rdfConverters; + private final List rdfConverters; + /** + * Constructor (autowired) + */ + public WebMvcConfig(List errorConverters, List rdfConverters) { + this.errorConverters = errorConverters; + this.rdfConverters = rdfConverters; + } + + /** + * Configures message converters. See + * + * example in Spring docs. + */ @Override - public void configureMessageConverters(List> converters) { - converters.add(new StringHttpMessageConverter()); - converters.addAll(errorConverters); - converters.addAll(rdfConverters); - converters.add(new ByteArrayHttpMessageConverter()); - converters.add(new MappingJackson2HttpMessageConverter(objectMapper())); + public void configureMessageConverters(HttpMessageConverters.@NonNull ServerBuilder builder) { + builder.withStringConverter(new StringHttpMessageConverter()) + .withJsonConverter(new JacksonJsonHttpMessageConverter(jsonMapper())) + .addCustomConverter(new ByteArrayHttpMessageConverter()); + errorConverters.forEach(builder::addCustomConverter); + rdfConverters.forEach(builder::addCustomConverter); } @Override - public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { + public void configureContentNegotiation(@NonNull ContentNegotiationConfigurer configurer) { for (ErrorConverter converter : errorConverters) { converter.configureContentNegotiation(configurer); } @@ -75,12 +85,15 @@ public void configureContentNegotiation(ContentNegotiationConfigurer configurer) @Bean @Primary - public ObjectMapper objectMapper() { - final ObjectMapper mapper = new ObjectMapper(); - mapper.findAndRegisterModules(); - mapper.setSerializationInclusion(NON_NULL); - mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - return mapper; + public JsonMapper jsonMapper() { + return JsonMapper.builder() + // https://javadoc.io/doc/com.fasterxml.jackson.core/jackson-databind/2.9.8/com/fasterxml/jackson/databind/ObjectMapper.html#findAndRegisterModules-- + // https://github.com/FasterXML/jackson/blob/main/jackson3/MIGRATING_TO_JACKSON_3.md#objectmapper-serialization-inclusion-configuration + .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)) + .changeDefaultPropertyInclusion(incl -> incl.withContentInclusion(JsonInclude.Include.NON_NULL)) + // https://github.com/FasterXML/jackson/blob/main/jackson3/MIGRATING_TO_JACKSON_3.md#objectmapper-visibility-configuration + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .build(); } @Bean diff --git a/src/main/java/org/fairdatateam/fairdatapoint/database/rdf/repository/AbstractMetadataRepository.java b/src/main/java/org/fairdatateam/fairdatapoint/database/rdf/repository/AbstractMetadataRepository.java index 53458e981..1fa0303e2 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/database/rdf/repository/AbstractMetadataRepository.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/database/rdf/repository/AbstractMetadataRepository.java @@ -22,7 +22,6 @@ */ package org.fairdatateam.fairdatapoint.database.rdf.repository; -import jakarta.annotation.Nullable; import lombok.extern.slf4j.Slf4j; import org.eclipse.rdf4j.common.iteration.Iterations; import org.eclipse.rdf4j.model.*; @@ -32,6 +31,7 @@ import org.eclipse.rdf4j.repository.Repository; import org.eclipse.rdf4j.repository.RepositoryConnection; import org.eclipse.rdf4j.repository.RepositoryException; +import org.jspecify.annotations.Nullable; import java.util.*; diff --git a/src/main/java/org/fairdatateam/fairdatapoint/entity/index/http/Request.java b/src/main/java/org/fairdatateam/fairdatapoint/entity/index/http/Request.java index d2be8039c..74d707c7b 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/entity/index/http/Request.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/entity/index/http/Request.java @@ -26,7 +26,6 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.springframework.http.HttpEntity; import java.net.http.HttpRequest; import java.util.List; @@ -58,11 +57,6 @@ public void setBody(String body) { this.body = body; } - public void setFromHttpEntity(HttpEntity httpEntity) { - body = httpEntity.getBody(); - headers = httpEntity.getHeaders(); - } - public void setFromHttpServletRequest(HttpServletRequest request) { method = request.getMethod(); url = request.getRequestURI(); diff --git a/src/main/java/org/fairdatateam/fairdatapoint/entity/schema/MetadataSchema.java b/src/main/java/org/fairdatateam/fairdatapoint/entity/schema/MetadataSchema.java index 7654a5075..2a9e41004 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/entity/schema/MetadataSchema.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/entity/schema/MetadataSchema.java @@ -27,7 +27,7 @@ import lombok.*; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.PersistenceConstructor; +import org.springframework.data.annotation.PersistenceCreator; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; @@ -98,7 +98,7 @@ public class MetadataSchema { private String previousVersionUuid; - @PersistenceConstructor + @PersistenceCreator public MetadataSchema( ObjectId id, String uuid, String versionUuid, String versionString, String name, String description, String definition, Set targetClasses, diff --git a/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/EventService.java b/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/EventService.java index efe93af41..17d87b175 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/EventService.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/EventService.java @@ -22,7 +22,6 @@ */ package org.fairdatateam.fairdatapoint.service.index.event; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.PostConstruct; import jakarta.servlet.http.HttpServletRequest; import lombok.SneakyThrows; @@ -57,6 +56,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import tools.jackson.databind.json.JsonMapper; import java.time.Instant; import java.util.Collections; @@ -70,7 +70,7 @@ public class EventService { private static final int PAGE_SIZE = 10; @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Autowired private ThreadPoolTaskExecutor executor; @@ -155,7 +155,7 @@ public Event acceptIncomingPing(PingDTO reqDto, HttpServletRequest request) { event.getIncomingPing().getExchange().getResponse() .setCode(HttpStatus.BAD_REQUEST.value()); event.getIncomingPing().getExchange().getResponse() - .setBody(objectMapper.writeValueAsString(nextException.getErrorDTO())); + .setBody(jsonMapper.writeValueAsString(nextException.getErrorDTO())); event.setFinished(Instant.now()); eventRepository.save(event); log.info("Incoming ping has incorrect format: {}", exception.getMessage()); diff --git a/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/IncomingPingUtils.java b/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/IncomingPingUtils.java index c9cad1f8f..32de551b8 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/IncomingPingUtils.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/service/index/event/IncomingPingUtils.java @@ -22,8 +22,6 @@ */ package org.fairdatateam.fairdatapoint.service.index.event; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import org.fairdatateam.fairdatapoint.api.dto.index.ping.PingDTO; import org.fairdatateam.fairdatapoint.entity.index.event.Event; @@ -32,6 +30,8 @@ import org.fairdatateam.fairdatapoint.entity.index.http.ExchangeDirection; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.json.JsonMapper; import java.util.*; @@ -41,7 +41,7 @@ public class IncomingPingUtils { private static final Integer VERSION = 1; @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; public Event prepareEvent(PingDTO reqDto, HttpServletRequest request, String remoteAddr) { final IncomingPing incomingPing = new IncomingPing(); @@ -51,9 +51,9 @@ public Event prepareEvent(PingDTO reqDto, HttpServletRequest request, String rem ex.getRequest().setHeaders(getHeaders(request)); ex.getRequest().setFromHttpServletRequest(request); try { - ex.getRequest().setBody(objectMapper.writeValueAsString(reqDto)); + ex.getRequest().setBody(jsonMapper.writeValueAsString(reqDto)); } - catch (JsonProcessingException exception) { + catch (JacksonException exception) { ex.getRequest().setBody(null); } diff --git a/src/main/java/org/fairdatateam/fairdatapoint/service/index/webhook/WebhookService.java b/src/main/java/org/fairdatateam/fairdatapoint/service/index/webhook/WebhookService.java index 9f5bca1ad..6c0326a17 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/service/index/webhook/WebhookService.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/service/index/webhook/WebhookService.java @@ -22,8 +22,6 @@ */ package org.fairdatateam.fairdatapoint.service.index.webhook; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.fairdatateam.fairdatapoint.api.dto.index.webhook.WebhookPayloadDTO; @@ -42,6 +40,8 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.json.JsonMapper; import java.security.NoSuchAlgorithmException; import java.util.Optional; @@ -57,7 +57,7 @@ public class WebhookService { private WebhookMapper webhookMapper; @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Autowired private WebhookRepository webhookRepository; @@ -79,10 +79,10 @@ public void processWebhookTrigger(Event event) { eventRepository.save(event); final WebhookPayloadDTO webhookPayload = webhookMapper.toWebhookPayloadDTO(event); try { - final String payloadWithSecret = objectMapper.writeValueAsString(webhookPayload); + final String payloadWithSecret = jsonMapper.writeValueAsString(webhookPayload); final String signature = WebhookUtils.computeHashSignature(payloadWithSecret); webhookPayload.setSecret(SECRET_PLACEHOLDER); - final String payloadWithoutSecret = objectMapper.writeValueAsString(webhookPayload); + final String payloadWithoutSecret = jsonMapper.writeValueAsString(webhookPayload); WebhookUtils.postWebhook( event, retrievalSettings.getTimeout(), @@ -90,7 +90,7 @@ public void processWebhookTrigger(Event event) { signature ); } - catch (JsonProcessingException exception) { + catch (JacksonException exception) { log.error("Failed to convert webhook payload to string"); } catch (NoSuchAlgorithmException exception) { diff --git a/src/main/java/org/fairdatateam/fairdatapoint/service/resource/ResourceDefinitionTargetClassesCache.java b/src/main/java/org/fairdatateam/fairdatapoint/service/resource/ResourceDefinitionTargetClassesCache.java index 4144c8eaa..85f134dd1 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/service/resource/ResourceDefinitionTargetClassesCache.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/service/resource/ResourceDefinitionTargetClassesCache.java @@ -75,17 +75,17 @@ public void computeCache() { final Queue parentUuids = new LinkedList<>(metadataSchemaMap.get(schemaUuid).getExtendSchemas()); final Set visitedParents = new HashSet<>(); - String parentUuid = null; while (!parentUuids.isEmpty()) { - parentUuid = parentUuids.poll(); + final String parentUuid = parentUuids.poll(); if (!visitedParents.contains(parentUuid)) { visitedParents.add(parentUuid); - targetClassUris.addAll( - metadataSchemaMap.get(parentUuid).getTargetClasses() - ); - parentUuids.addAll( - metadataSchemaMap.get(parentUuid).getExtendSchemas() - ); + final MetadataSchema parentSchema = metadataSchemaMap.get(parentUuid); + if (parentSchema != null) { + targetClassUris.addAll( + Optional.ofNullable(parentSchema.getTargetClasses()).orElse(Set.of())); + parentUuids.addAll( + Optional.ofNullable(parentSchema.getExtendSchemas()).orElse(List.of())); + } } } } diff --git a/src/main/java/org/fairdatateam/fairdatapoint/service/schema/MetadataSchemaRetrievalUtils.java b/src/main/java/org/fairdatateam/fairdatapoint/service/schema/MetadataSchemaRetrievalUtils.java index 0e26fa3f5..2122e0d04 100644 --- a/src/main/java/org/fairdatateam/fairdatapoint/service/schema/MetadataSchemaRetrievalUtils.java +++ b/src/main/java/org/fairdatateam/fairdatapoint/service/schema/MetadataSchemaRetrievalUtils.java @@ -22,13 +22,13 @@ */ package org.fairdatateam.fairdatapoint.service.schema; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.fairdatateam.fairdatapoint.api.dto.schema.MetadataSchemaVersionDTO; import org.fairdatateam.fairdatapoint.entity.exception.MetadataSchemaImportException; import org.springframework.http.HttpHeaders; +import tools.jackson.core.JacksonException; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.json.JsonMapper; import java.io.IOException; import java.net.URI; @@ -49,7 +49,7 @@ public class MetadataSchemaRetrievalUtils { .connectTimeout(Duration.ofMinutes(1)) .build(); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + private static final JsonMapper JSON_MAPPER = new JsonMapper(); private static final TypeReference> RESPONSE_TYPE = new TypeReference<>() { @@ -64,9 +64,9 @@ public static List retrievePublishedMetadataSchemas(St .GET().build(); final HttpResponse response = HTTP_CLIENT.send(request, HttpResponse.BodyHandlers.ofString()); - return OBJECT_MAPPER.readValue(response.body(), RESPONSE_TYPE); + return JSON_MAPPER.readValue(response.body(), RESPONSE_TYPE); } - catch (JsonProcessingException exception) { + catch (JacksonException exception) { log.warn( format("Could not parse published metadata schemas from %s: %s", fdpUrl, exception.getMessage()) diff --git a/src/main/resources/application-development.yml b/src/main/resources/application-development.yml index d392068c9..64084a0a7 100644 --- a/src/main/resources/application-development.yml +++ b/src/main/resources/application-development.yml @@ -7,6 +7,5 @@ security: expiration: 999 spring: - data: - mongodb: - uri: mongodb://localhost:27017/fdp-dev + mongodb: + uri: mongodb://localhost:27017/fdp-dev diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cf6820ad3..7f74c4ed2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -9,12 +9,14 @@ instance: spring: data: - mongodb: - uri: mongodb://${FDP_MONGO_HOST:mongo}:${FDP_MONGO_PORT:27017}/${FDP_MONGO_DB:fdp} web: pageable: default-page-size: 50 qualifier-delimiter: _ + mongodb: + representation: + uuid: standard + uri: mongodb://${FDP_MONGO_HOST:mongo}:${FDP_MONGO_PORT:27017}/${FDP_MONGO_DB:fdp} profiles: active: production task: diff --git a/src/test/java/org/fairdatateam/fairdatapoint/WebIntegrationTest.java b/src/test/java/org/fairdatateam/fairdatapoint/WebIntegrationTest.java index c76cc00cf..6ddc74426 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/WebIntegrationTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/WebIntegrationTest.java @@ -26,12 +26,14 @@ import org.fairdatateam.fairdatapoint.database.rdf.migration.development.RdfDevelopmentMigrationRunner; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.test.context.ActiveProfiles; @ActiveProfiles(Profiles.TESTING) // todo: in most cases we can probably use WebEnvironment.MOCK with MockMvc instead of TestRestTemplate (see #862) +@AutoConfigureTestRestTemplate @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public abstract class WebIntegrationTest { diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/actuator/MetricsTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/actuator/MetricsTest.java index b4399e3ef..22e3424c1 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/actuator/MetricsTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/actuator/MetricsTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/ForbiddenTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/ForbiddenTest.java index 0124c79ed..dd7c296dd 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/ForbiddenTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/ForbiddenTest.java @@ -22,7 +22,7 @@ */ package org.fairdatateam.fairdatapoint.acceptance.common; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/NotFoundTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/NotFoundTest.java index 2d702ff51..ebdaf3fd5 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/NotFoundTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/common/NotFoundTest.java @@ -22,7 +22,7 @@ */ package org.fairdatateam.fairdatapoint.acceptance.common; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/general/CorsTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/general/CorsTest.java index ca4ba5905..7a629e655 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/general/CorsTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/general/CorsTest.java @@ -26,7 +26,7 @@ import org.fairdatateam.fairdatapoint.Profiles; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/metadata/Common.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/metadata/Common.java index bf51f2d8a..8760ca3a5 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/metadata/Common.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/metadata/Common.java @@ -27,7 +27,7 @@ import org.fairdatateam.fairdatapoint.api.dto.metadata.MetaStateChangeDTO; import org.fairdatateam.fairdatapoint.api.dto.metadata.MetaStateDTO; import org.fairdatateam.fairdatapoint.entity.metadata.MetadataState; -import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.resttestclient.TestRestTemplate; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/openapi/SwaggerUI_GET.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/openapi/SwaggerUI_GET.java index 22bd6c3dd..9f01e4ffd 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/openapi/SwaggerUI_GET.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/openapi/SwaggerUI_GET.java @@ -23,11 +23,9 @@ package org.fairdatateam.fairdatapoint.acceptance.openapi; import org.fairdatateam.fairdatapoint.WebIntegrationTest; -import org.fairdatateam.fairdatapoint.api.dto.index.entry.IndexEntryDTO; -import org.fairdatateam.fairdatapoint.utils.CustomPageImpl; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.springframework.boot.http.client.ClientHttpRequestFactorySettings; +import org.springframework.boot.http.client.HttpRedirects; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -62,7 +60,7 @@ public void res302_redirectsToSwaggerUI() { .build(); // WHEN - ResponseEntity result = client.withRedirects(ClientHttpRequestFactorySettings.Redirects.DONT_FOLLOW) + ResponseEntity result = client.withRedirects(HttpRedirects.DONT_FOLLOW) .exchange(request, new ParameterizedTypeReference<>() {}); // THEN diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/schema/Draft_PUT.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/schema/Draft_PUT.java index 02e1ebcbe..4f8f010da 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/schema/Draft_PUT.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/schema/Draft_PUT.java @@ -103,7 +103,7 @@ public void res200() { assertThat(result.getBody().getName(), is(equalTo(reqDto.getName()))); assertThat(result.getBody().getDescription(), is(equalTo(reqDto.getDescription()))); assertThat(result.getBody().getDefinition(), is(equalTo(reqDto.getDefinition()))); - assertThat(result.getBody().isAbstractSchema(), is(equalTo(reqDto.isAbstractSchema()))); + assertThat(result.getBody().getAbstractSchema(), is(equalTo(reqDto.isAbstractSchema()))); assertThat(result.getBody().getExtendsSchemaUuids(), is(equalTo(reqDto.getExtendsSchemaUuids()))); } diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyCleaningServiceTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyCleaningServiceTest.java index 61d21e388..4e9932c8b 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyCleaningServiceTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyCleaningServiceTest.java @@ -86,7 +86,7 @@ public void cleansRequestHeaders() throws NoSuchMethodException, InvocationTarge // check result assertThat(requestHeadersOutgoing.getAccept()).hasSize(1).contains(MediaType.APPLICATION_JSON); - assertThat(requestHeadersOutgoing.containsKey(HttpHeaders.AUTHORIZATION)).isFalse(); + assertThat(requestHeadersOutgoing.containsHeader(HttpHeaders.AUTHORIZATION)).isFalse(); assertThat(requestHeadersOutgoing.get(SparqlProxyCleaningService.HEADER_X_FORWARDED_FOR)) .hasSize(1).contains(remoteIP); } @@ -126,11 +126,11 @@ cleaningService, new MockClientHttpRequest(), sparqlServerResponse // check result final HttpHeaders cleanedResponseHeaders = cleanedResponse.getHeaders(); - assertThat(cleanedResponseHeaders).doesNotContainKey(customHeaderName); - hopByHopHeaders.forEach(header -> assertThat(cleanedResponseHeaders).doesNotContainKey(header)); - assertThat(cleanedResponseHeaders).doesNotContainKey(HttpHeaders.CONNECTION); - assertThat(cleanedResponseHeaders).doesNotContainEntry(HttpHeaders.SERVER, List.of(backendServerHeader)); - assertThat(cleanedResponseHeaders).containsEntry(HttpHeaders.SERVER, List.of("Test API 1.0")); + assertThat(cleanedResponseHeaders.containsHeader(customHeaderName)).isFalse(); + hopByHopHeaders.forEach(header -> assertThat(cleanedResponseHeaders.containsHeader(header)).isFalse()); + assertThat(cleanedResponseHeaders.containsHeader(HttpHeaders.CONNECTION)).isFalse(); + assertThat(cleanedResponseHeaders.containsHeaderValue(HttpHeaders.SERVER, backendServerHeader)).isFalse(); + assertThat(cleanedResponseHeaders.containsHeaderValue(HttpHeaders.SERVER, "Test API 1.0")); } } } diff --git a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyControllerTest.java b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyControllerTest.java index 4d00f2b46..f7a3a5321 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyControllerTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/acceptance/search/sparql/SparqlProxyControllerTest.java @@ -27,8 +27,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureMockRestServiceServer; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.restclient.test.autoconfigure.AutoConfigureMockRestServiceServer; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.*; import org.springframework.security.test.context.support.WithAnonymousUser; diff --git a/src/test/java/org/fairdatateam/fairdatapoint/service/index/harvester/HarvesterServiceTest.java b/src/test/java/org/fairdatateam/fairdatapoint/service/index/harvester/HarvesterServiceTest.java index 77a49f3f6..cf63cbb9e 100644 --- a/src/test/java/org/fairdatateam/fairdatapoint/service/index/harvester/HarvesterServiceTest.java +++ b/src/test/java/org/fairdatateam/fairdatapoint/service/index/harvester/HarvesterServiceTest.java @@ -80,7 +80,7 @@ public class HarvesterServiceTest { private Model catalog; @BeforeEach - private void setup() { + public void setup() { // Setup resource definition; ResourceDefinitionFixtures resourceDefinitionFixtures = new ResourceDefinitionFixtures(); diff --git a/src/test/resources/application-testing.yml b/src/test/resources/application-testing.yml index fac55fdcc..6e7d039ab 100644 --- a/src/test/resources/application-testing.yml +++ b/src/test/resources/application-testing.yml @@ -7,9 +7,8 @@ server: port: 8088 spring: - data: - mongodb: - uri: mongodb://localhost:27017/fdp-test + mongodb: + uri: mongodb://localhost:27017/fdp-test security: jwt: