Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
4539074
bump spring-boot-starter-parent from 3.5.14 to 4.0.6 (latest)
dennisvang Jun 10, 2026
83b878b
replace spring.data.mongodb by spring.mongodb in application.yml
dennisvang Jun 10, 2026
ccacfc6
link to spring-boot managed dependencies in pom.xml
dennisvang Jun 10, 2026
d8abcd2
rename spring-boot-starter-aop to spring-boot-starter-aspectj
dennisvang Jun 10, 2026
9de3ef1
replace deprecated spring-boot-starter-web by spring-boot-starter-webmvc
dennisvang Jun 10, 2026
0f3c6b0
remove android-json exclusion from spring-boot-starter-test
dennisvang Jun 10, 2026
fdf8340
replace spring-security-test by spring-boot-starter-security-test
dennisvang Jun 10, 2026
bfef12a
remove redundant spring-data-mongodb dependency
dennisvang Jun 10, 2026
74978a3
replace deprecated PersistenceConstructor by PersistenceCreator
dennisvang Jun 10, 2026
59bd2f9
add spring-boot-starter-restclient and corresponding test starter
dennisvang Jun 10, 2026
1242ce9
Merge branch 'master' into maintenance/920-upgrade-to-spring-boot-4
dennisvang Jun 12, 2026
eab7ce6
Merge branch 'master' into maintenance/920-upgrade-to-spring-boot-4
dennisvang Jun 15, 2026
28889b9
Merge branch 'master' into maintenance/920-upgrade-to-spring-boot-4
dennisvang Jun 16, 2026
12f1d25
fix imports for AutoConfigureMockMvc and AutoConfigureMockRestService…
dennisvang Jun 18, 2026
064d07b
add spring-boot-starter-micrometer-metrics dependency and fix corresp…
dennisvang Jun 18, 2026
5821318
revert spring-boot-starter-micrometer-metrics dependency
dennisvang Jun 18, 2026
3c73551
remove unused setFromHttpEntity method
dennisvang Jun 18, 2026
de2ac16
fix TestRestTemplate imports
dennisvang Jun 18, 2026
9ece930
replace ClientHttpRequestFactorySettings.Redirects by HttpRedirects
dennisvang Jun 19, 2026
167ff1a
fix HttpHeaders assertions because the class no longer extends MultiV…
dennisvang Jun 19, 2026
256623b
Merge branch 'master' into maintenance/920-upgrade-to-spring-boot-4
dennisvang Jun 19, 2026
054249f
rearrange httpclient5 dependency
dennisvang Jun 19, 2026
f1dbe84
explicit dependency on jakarta.servlet-api
dennisvang Jun 19, 2026
41f0426
bump springdoc-openapi-starter-webmvc-ui from 2.8.16 to 3.0.3
dennisvang Jun 19, 2026
7501061
add @AutoConfigureTestRestTemplate to WebIntegrationTest
dennisvang Jun 19, 2026
7135cb3
make setup() public in HarvesterServiceTest
dennisvang Jun 19, 2026
516dd28
bump spring-boot-starter-parent from 4.0.6 to 4.1.0
dennisvang Jun 19, 2026
0a6da7e
clean up spring-boot-starters
dennisvang Jun 19, 2026
5c6cdd5
explicit jackson dependency
dennisvang Jun 19, 2026
aa5f44d
explicit dependency on spring-boot-data-mongodb
dennisvang Jun 19, 2026
e303a0f
use jspecify @Nullable in AbstractMetadataRepository
dennisvang Jun 19, 2026
ace2171
handle null in ResourceDefinitionTargetClassesCache
dennisvang Jun 19, 2026
e9cdead
Merge branch 'master' into maintenance/920-upgrade-to-spring-boot-4
dennisvang Jun 22, 2026
7002066
fix style for ResourceDefinitionTargetClassesCache
dennisvang Jun 22, 2026
3a4f5cb
configure mongodb uuid representation
dennisvang Jun 22, 2026
8259751
explicit no-args constructor for MetadataSchemaDraftDTO marked as @Js…
dennisvang Jun 22, 2026
93e6a36
Upgrade to Jackson 3 (#934)
dennisvang Jun 22, 2026
9883304
switch WebMvcConfig to constructor autowiring
dennisvang Jun 22, 2026
1b1cfed
update configureMessageConverters to use ServerBuilder
dennisvang Jun 22, 2026
42956c8
annotate ContentNegotiationConfigurer NonNull to match parent signature
dennisvang Jun 22, 2026
9b9875b
bump spring-security-acl-mongodb version from 6.0.4 to 6.0.5
dennisvang Jun 23, 2026
faf50d4
bump rdf-resource-resolver version from 0.2.0 to 0.2.2
dennisvang Jun 23, 2026
c588dfa
explicit dependency on slf4j
dennisvang Jun 23, 2026
091af26
bump spring-rdf-migration version from 2.0.0 to 2.0.1
dennisvang Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 57 additions & 35 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
<version>4.1.0</version>
<!-- spring-boot managed dependencies: https://docs.spring.io/spring-boot/appendix/dependency-versions/coordinates.html -->
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.fairdatateam</groupId>
Expand Down Expand Up @@ -54,12 +55,12 @@
<maven.compiler.target>21</maven.compiler.target>

<!-- Project related -->
<spring-rdf-migration.version>2.0.0</spring-rdf-migration.version>
<rdf-resource-resolver.version>0.2.0</rdf-resource-resolver.version>
<spring-security-acl-mongodb.version>6.0.4</spring-security-acl-mongodb.version>
<spring-rdf-migration.version>2.0.1</spring-rdf-migration.version>
<rdf-resource-resolver.version>0.2.2</rdf-resource-resolver.version>
<spring-security-acl-mongodb.version>6.0.5</spring-security-acl-mongodb.version>

<!-- Core -->
<springdoc-openapi-starter-webmvc-ui.version>2.8.16</springdoc-openapi-starter-webmvc-ui.version>
<springdoc-openapi-starter-webmvc-ui.version>3.0.3</springdoc-openapi-starter-webmvc-ui.version>
<mongock-bom.version>5.5.1</mongock-bom.version>
<rdf4j-runtime.version>5.3.1</rdf4j-runtime.version>
<jjwt-api.version>0.13.0</jjwt-api.version>
Expand Down Expand Up @@ -127,9 +128,10 @@
<!-- ////////////////// -->
<!-- Spring -->
<!-- ////////////////// -->

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<!-- excluded because we're using spring-boot-starter-log4j2 instead (see spring-boot logging docs) -->
Expand All @@ -140,40 +142,75 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<artifactId>spring-boot-starter-aspectj</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<artifactId>spring-boot-starter-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<artifactId>spring-boot-starter-restclient</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-restclient-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide#testresttemplate-failures -->
<!-- todo: remove in favor of restclient, see #897 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<artifactId>spring-boot-resttestclient</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<!-- with transitive dependency on hibernate-validator -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>

<!-- ////////////////// -->
<!-- Mongock -->
<!-- ////////////////// -->

<!-- mongock versions are managed via mongock-bom -->
<dependency>
<groupId>io.mongock</groupId>
<artifactId>mongock-springboot</artifactId>
Expand All @@ -182,10 +219,6 @@
<groupId>io.mongock</groupId>
<artifactId>mongodb-springdata-v4-driver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>

<!-- ////////////////// -->
<!-- Core -->
Expand Down Expand Up @@ -238,30 +271,19 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<!-- ////////////////// -->
<!-- Test -->
<!-- ////////////////// -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@
*/
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;
import lombok.*;

import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
Expand All @@ -47,7 +47,7 @@ public class MetadataSchemaDraftDTO {
@NotNull
private String description;

private boolean abstractSchema;
private Boolean abstractSchema;

@NotNull
private String definition;
Expand All @@ -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 <a href="https://github.com/FasterXML/jackson/wiki/Jackson-Release-3.0#jackson-databind">
* FasterXML/jackson-databind#5318</a> for more info.
*/
@JsonCreator
public MetadataSchemaDraftDTO() {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -53,7 +53,7 @@ public class JwtTokenFilter extends OncePerRequestFilter {
private ApiKeyService apiKeyService;

@Autowired
private ObjectMapper objectMapper;
private JsonMapper jsonMapper;

@Override
public void doFilterInternal(
Expand All @@ -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);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ErrorConverter> errorConverters;
private final List<ErrorConverter> errorConverters;

@Autowired
private List<RdfConverter> rdfConverters;
private final List<RdfConverter> rdfConverters;

/**
* Constructor (autowired)
*/
public WebMvcConfig(List<ErrorConverter> errorConverters, List<RdfConverter> rdfConverters) {
this.errorConverters = errorConverters;
this.rdfConverters = rdfConverters;
}

/**
* Configures message converters. See
* <a href="https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config/message-converters.html">
* example in Spring docs</a>.
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> 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);
}
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand All @@ -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.*;

Expand Down
Loading
Loading