From 63d00bc122c0cfdb3521b23a56ed3f0d465ac981 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:40:47 +0100 Subject: [PATCH 01/12] chore: upgrade to jackson 3 --- pom.xml | 16 +++------------- .../http/impl/IbanityHttpClientImpl.java | 2 +- .../jsonapi/OAuth2ErrorResourceApiModel.java | 2 +- .../client/mappers/IbanityErrorMapper.java | 2 +- .../isabel_connect/models/AccessToken.java | 2 +- .../isabel_connect/models/Balance.java | 2 +- .../isabel_connect/models/InitialToken.java | 2 +- .../products/isabel_connect/models/Token.java | 2 +- .../products/ponto_connect/models/Token.java | 2 +- .../services/impl/UsageServiceImpl.java | 2 +- .../services/impl/ApiUrlProviderImpl.java | 2 +- .../apis/client/utils/IbanityUtils.java | 18 +++++++----------- .../services/impl/WebhooksServiceImpl.java | 6 +++--- 13 files changed, 23 insertions(+), 37 deletions(-) diff --git a/pom.xml b/pom.xml index 45c40d16..1f887bd5 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ 1.15 1.7.35 4.5.13 - 2.13.3 + 3.0.3 1.79 1.18.22 @@ -161,18 +161,8 @@ provided - com.fasterxml.jackson.datatype - jackson-datatype-jdk8 - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 + tools.jackson.core + jackson-databind ${jackson.version} diff --git a/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java b/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java index c1d5184c..dc49c566 100644 --- a/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java +++ b/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.http.impl; -import com.fasterxml.jackson.core.JsonProcessingException; +import tools.jackson.core.JsonProcessingException; import com.ibanity.apis.client.http.IbanityHttpClient; import com.ibanity.apis.client.http.handler.IbanityResponseHandler; import lombok.NonNull; diff --git a/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java b/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java index 00a0516e..1ce052cb 100644 --- a/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java +++ b/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.jsonapi; -import com.fasterxml.jackson.annotation.JsonProperty; +import tools.jackson.annotation.JsonProperty; import lombok.*; @Getter diff --git a/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java b/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java index 6adcd6dc..b1c034f0 100644 --- a/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java +++ b/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.mappers; -import com.fasterxml.jackson.core.JsonProcessingException; +import tools.jackson.core.JsonProcessingException; import com.ibanity.apis.client.jsonapi.FinancialInstitutionResponseApiModel; import com.ibanity.apis.client.jsonapi.IbanityErrorApiModel; import com.ibanity.apis.client.jsonapi.OAuth2ErrorResourceApiModel; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java index 1f73bdf4..40667694 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import com.fasterxml.jackson.annotation.JsonProperty; +import tools.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java index 2189ff17..8794691e 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import com.fasterxml.jackson.annotation.JsonFormat; +import tools.jackson.annotation.JsonFormat; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java index 26b4713a..e9c10429 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import com.fasterxml.jackson.annotation.JsonProperty; +import tools.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java index 21e0ccba..54d49bbb 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import com.fasterxml.jackson.annotation.JsonProperty; +import tools.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java index 26ccfa84..9ef833dc 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.ponto_connect.models; -import com.fasterxml.jackson.annotation.JsonProperty; +import tools.jackson.annotation.JsonProperty; import lombok.*; @Data diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java index 823280dd..5066cba7 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.ponto_connect.services.impl; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import com.ibanity.apis.client.http.IbanityHttpClient; import com.ibanity.apis.client.models.IbanityProduct; import com.ibanity.apis.client.products.ponto_connect.models.OrganizationUsage; diff --git a/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java b/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java index 7e493f69..4f200c3e 100644 --- a/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java +++ b/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.services.impl; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import com.ibanity.apis.client.http.IbanityHttpClient; import com.ibanity.apis.client.models.IbanityProduct; import com.ibanity.apis.client.services.ApiUrlProvider; diff --git a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java index 908e3376..da41f5d5 100644 --- a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java +++ b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java @@ -1,11 +1,6 @@ package com.ibanity.apis.client.utils; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.ibanity.apis.client.builders.IbanityConfiguration; import com.ibanity.apis.client.http.interceptor.IbanitySignatureInterceptor; import com.ibanity.apis.client.http.interceptor.IdempotencyInterceptor; @@ -17,6 +12,9 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.DefaultClientConnectionReuseStrategy; import org.apache.http.impl.client.HttpClientBuilder; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; import javax.net.ssl.*; import java.io.IOException; @@ -75,12 +73,10 @@ public static HttpClient httpClient(IbanityConfiguration configuration) { } public static ObjectMapper objectMapper() { - return new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .registerModule(new Jdk8Module()) - .registerModule(new JavaTimeModule()) - .setSerializationInclusion(JsonInclude.Include.NON_NULL) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + return JsonMapper.builder() + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)) + .build(); } private static void configureHttpClient(SSLContext sslContext, diff --git a/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java b/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java index 5b56e42a..25619dd9 100644 --- a/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java +++ b/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java @@ -1,7 +1,7 @@ package com.ibanity.apis.client.webhooks.services.impl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; import com.ibanity.apis.client.exceptions.IbanityRuntimeException; import com.ibanity.apis.client.http.IbanityHttpClient; import com.ibanity.apis.client.models.IbanityWebhookEvent; @@ -34,7 +34,7 @@ public IbanityWebhookEvent verifyAndParseEvent(String payload, String jwt) { JsonNode jsonNode = IbanityUtils.objectMapper().readTree(payload); String type = jsonNode.get("data").get("type").textValue(); return WebhooksUtils.webhookEventParser(payload, type); - } catch (JsonProcessingException exception) { + } catch (JacksonException exception) { throw new IllegalArgumentException("Response cannot be parsed", exception); } } From add48e333421d522766c3dfa653cbbaf671e79c6 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:43:16 +0100 Subject: [PATCH 02/12] chore: upgrade to jackson 3 --- .github/workflows/publish_on_release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish_on_release.yml b/.github/workflows/publish_on_release.yml index 01e13410..b6d7f4db 100644 --- a/.github/workflows/publish_on_release.yml +++ b/.github/workflows/publish_on_release.yml @@ -1,5 +1,6 @@ name: Publish release to the Maven Central Repository + on: release: types: [published] From 1398b031073e8fc33b1dba793c99a692c0a34d0d Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:43:21 +0100 Subject: [PATCH 03/12] chore: upgrade to jackson 3 --- .github/workflows/publish_on_release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/publish_on_release.yml b/.github/workflows/publish_on_release.yml index b6d7f4db..01e13410 100644 --- a/.github/workflows/publish_on_release.yml +++ b/.github/workflows/publish_on_release.yml @@ -1,6 +1,5 @@ name: Publish release to the Maven Central Repository - on: release: types: [published] From a9f421acccb358411cc707a9b5aa8520fa796a39 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:45:18 +0100 Subject: [PATCH 04/12] chore: fix jackson annotation import --- .../apis/client/jsonapi/OAuth2ErrorResourceApiModel.java | 2 +- .../apis/client/products/isabel_connect/models/AccessToken.java | 2 +- .../apis/client/products/isabel_connect/models/Balance.java | 2 +- .../client/products/isabel_connect/models/InitialToken.java | 2 +- .../apis/client/products/isabel_connect/models/Token.java | 2 +- .../apis/client/products/ponto_connect/models/Token.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java b/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java index 1ce052cb..00a0516e 100644 --- a/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java +++ b/src/main/java/com/ibanity/apis/client/jsonapi/OAuth2ErrorResourceApiModel.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.jsonapi; -import tools.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; @Getter diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java index 40667694..1f73bdf4 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/AccessToken.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import tools.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java index 8794691e..2189ff17 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Balance.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import tools.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java index e9c10429..26b4713a 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/InitialToken.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import tools.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java index 54d49bbb..21e0ccba 100644 --- a/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java +++ b/src/main/java/com/ibanity/apis/client/products/isabel_connect/models/Token.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.isabel_connect.models; -import tools.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import lombok.experimental.SuperBuilder; diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java index 9ef833dc..26ccfa84 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/Token.java @@ -1,6 +1,6 @@ package com.ibanity.apis.client.products.ponto_connect.models; -import tools.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; @Data From ce793bb0c92adb7195235c924fcf00b7e4dffca7 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:47:31 +0100 Subject: [PATCH 05/12] chore: replace JsonProcessingException with JacksonException --- .github/workflows/build.yml | 2 +- .../apis/client/http/impl/IbanityHttpClientImpl.java | 6 +++--- .../com/ibanity/apis/client/mappers/IbanityErrorMapper.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00ecbb54..e936aff3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: - name: Set up Maven Central Repository uses: actions/setup-java@v1 with: - java-version: 20 + java-version: 21 server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD diff --git a/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java b/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java index dc49c566..60808a3e 100644 --- a/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java +++ b/src/main/java/com/ibanity/apis/client/http/impl/IbanityHttpClientImpl.java @@ -1,6 +1,5 @@ package com.ibanity.apis.client.http.impl; -import tools.jackson.core.JsonProcessingException; import com.ibanity.apis.client.http.IbanityHttpClient; import com.ibanity.apis.client.http.handler.IbanityResponseHandler; import lombok.NonNull; @@ -11,6 +10,7 @@ import org.apache.http.client.methods.*; import org.apache.http.entity.StringEntity; import org.apache.http.message.BasicHeader; +import tools.jackson.core.JacksonException; import javax.net.ssl.SSLContext; import java.io.IOException; @@ -72,7 +72,7 @@ public HttpResponse post(@NonNull URI path, @NonNull Object requestApiModel, @No HttpPost httpPost = new HttpPost(path); httpPost.setEntity(createEntityRequest(objectMapper().writeValueAsString(requestApiModel))); return execute(additionalHeaders, customerAccessToken, httpPost); - } catch (JsonProcessingException exception) { + } catch (JacksonException exception) { throw new RuntimeException("An error occurred while converting object to json", exception); } } @@ -109,7 +109,7 @@ public HttpResponse patch(@NonNull URI path, @NonNull Object requestApiModel, @N HttpPatch httpPatch = new HttpPatch(path); httpPatch.setEntity(createEntityRequest(objectMapper().writeValueAsString(requestApiModel))); return execute(additionalHeaders, customerAccessToken, httpPatch); - } catch (JsonProcessingException exception) { + } catch (JacksonException exception) { throw new RuntimeException("An error occurred while converting object to json", exception); } } diff --git a/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java b/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java index b1c034f0..5fb60401 100644 --- a/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java +++ b/src/main/java/com/ibanity/apis/client/mappers/IbanityErrorMapper.java @@ -1,12 +1,12 @@ package com.ibanity.apis.client.mappers; -import tools.jackson.core.JsonProcessingException; import com.ibanity.apis.client.jsonapi.FinancialInstitutionResponseApiModel; import com.ibanity.apis.client.jsonapi.IbanityErrorApiModel; import com.ibanity.apis.client.jsonapi.OAuth2ErrorResourceApiModel; import com.ibanity.apis.client.models.ErrorMeta; import com.ibanity.apis.client.models.FinancialInstitutionResponse; import com.ibanity.apis.client.models.IbanityError; +import tools.jackson.core.JacksonException; import static com.ibanity.apis.client.utils.IbanityUtils.objectMapper; @@ -47,7 +47,7 @@ private static String parseBody(FinancialInstitutionResponseApiModel financialIn } else { try { return objectMapper().writeValueAsString(body); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new RuntimeException("Invalid payload", e); } } From 8fdad7ab6537897d497c6f13a0985f26f6ad1fb5 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 19:52:02 +0100 Subject: [PATCH 06/12] chore: replace JsonProcessingException with JacksonException --- .github/workflows/build.yml | 5 +++-- .github/workflows/coverage.yml | 9 +++++---- .github/workflows/publish_on_release.yml | 7 ++++--- .../apis/client/mappers/IbanityWebhookEventMapper.java | 3 ++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e936aff3..14bd7863 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,11 +7,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v6 - name: Set up Maven Central Repository - uses: actions/setup-java@v1 + uses: actions/setup-java@v5 with: java-version: 21 + distribution: temurin server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index bd876e2f..1f0883ed 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -6,13 +6,14 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v6 with: fetch-depth: 0 - - name: Set up JDK 20 - uses: actions/setup-java@v1 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: - java-version: 20 + java-version: 21 + distribution: temurin - name: Build and analyze run: mvn -B verify -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Pcoverage env: diff --git a/.github/workflows/publish_on_release.yml b/.github/workflows/publish_on_release.yml index 01e13410..aa165f4b 100644 --- a/.github/workflows/publish_on_release.yml +++ b/.github/workflows/publish_on_release.yml @@ -8,11 +8,12 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v6 - name: Set up Maven Central Repository - uses: actions/setup-java@v1 + uses: actions/setup-java@v5 with: - java-version: 20 + java-version: 21 + distribution: temurin server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD diff --git a/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java b/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java index 465cdb56..9f13d8e9 100644 --- a/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java +++ b/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java @@ -4,6 +4,7 @@ import com.ibanity.apis.client.jsonapi.ResourceApiModel; import com.ibanity.apis.client.models.IbanityWebhookEvent; import com.ibanity.apis.client.utils.IbanityUtils; +import tools.jackson.core.JacksonException; import java.io.IOException; import java.util.function.Function; @@ -17,7 +18,7 @@ public static T mapWebhookResource(String payloa try { DataApiModel dataApiModel = IbanityUtils.objectMapper().readValue(payload, ResourceApiModel.class).getData(); return customMapping.apply(dataApiModel); - } catch (IOException exception) { + } catch (JacksonException exception) { throw new IllegalArgumentException("Response cannot be parsed", exception); } } From e530c220ab7fd8c330ee92a26880b80ef6fd909f Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 20:02:47 +0100 Subject: [PATCH 07/12] fix: upgrade lombok in order to fix build with jdk 21 --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 1f887bd5..5bb3ab01 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,7 @@ 4.5.13 3.0.3 1.79 - 1.18.22 + 1.18.42 3.2.3-RELEASE @@ -96,8 +96,8 @@ 5.10.2 1.8.2 1.2.0 - 4.3.1 - 3.22.0 + 5.21.0 + 4.0.0-M1 https://sonarcloud.io From e57c5fe7a102f1e59bc17ec8e11fe8fe8f038864 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 20:13:36 +0100 Subject: [PATCH 08/12] ci: empty From 43cd2a356bdef786396365aa17ea056ca9ea55f9 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 20:15:28 +0100 Subject: [PATCH 09/12] chore: rollback `mockito` and `assertj` dependency update --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5bb3ab01..c6fac3bf 100644 --- a/pom.xml +++ b/pom.xml @@ -96,8 +96,8 @@ 5.10.2 1.8.2 1.2.0 - 5.21.0 - 4.0.0-M1 + 4.3.1 + 3.22.0 https://sonarcloud.io From 2aa4115cc928e288c05837f163b51484a93678f5 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 14 Dec 2025 22:21:23 +0100 Subject: [PATCH 10/12] fix: object mapper builder --- src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java index da41f5d5..2f702df9 100644 --- a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java +++ b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java @@ -76,6 +76,7 @@ public static ObjectMapper objectMapper() { return JsonMapper.builder() .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)) + .changeDefaultPropertyInclusion(incl -> incl.withContentInclusion(JsonInclude.Include.NON_NULL)) .build(); } From 98c9709684de3ff1f726ca9cbe063104988d88b3 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Mon, 15 Dec 2025 18:27:36 +0100 Subject: [PATCH 11/12] test: add unit tests for ObjectMapper settings --- .../mappers/IbanityWebhookEventMapper.java | 1 - .../apis/client/utils/IbanityUtilsTest.java | 88 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/ibanity/apis/client/utils/IbanityUtilsTest.java diff --git a/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java b/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java index 9f13d8e9..1b450152 100644 --- a/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java +++ b/src/main/java/com/ibanity/apis/client/mappers/IbanityWebhookEventMapper.java @@ -6,7 +6,6 @@ import com.ibanity.apis.client.utils.IbanityUtils; import tools.jackson.core.JacksonException; -import java.io.IOException; import java.util.function.Function; import static java.lang.String.format; diff --git a/src/test/java/com/ibanity/apis/client/utils/IbanityUtilsTest.java b/src/test/java/com/ibanity/apis/client/utils/IbanityUtilsTest.java new file mode 100644 index 00000000..c0693e82 --- /dev/null +++ b/src/test/java/com/ibanity/apis/client/utils/IbanityUtilsTest.java @@ -0,0 +1,88 @@ +package com.ibanity.apis.client.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.junit.jupiter.api.Test; +import tools.jackson.databind.ObjectMapper; + +import java.time.Instant; +import java.util.Date; + +import static org.assertj.core.api.Assertions.assertThat; + +class IbanityUtilsTest { + + @Test + void objectMapper_shouldDeserializeJsonWithUnknownProperties() { + ObjectMapper objectMapper = IbanityUtils.objectMapper(); + + String jsonWithUnknownProperty = "{\"name\":\"John\",\"unknownField\":\"value\",\"anotherUnknown\":123}"; + + TestPerson person = objectMapper.readValue(jsonWithUnknownProperty, TestPerson.class); + + assertThat(person.getName()).isEqualTo("John"); + } + + @Test + void objectMapper_shouldExcludeNullPropertiesFromSerialization() { + ObjectMapper objectMapper = IbanityUtils.objectMapper(); + + TestPerson person = TestPerson.builder() + .name("John") + .email(null) + .build(); + + String json = objectMapper.writeValueAsString(person); + + assertThat(json).isEqualTo("{\"name\":\"John\"}"); + } + + @Test + void objectMapper_shouldWriteDateAsTimestamp() { + ObjectMapper objectMapper = IbanityUtils.objectMapper(); + + Instant instant = Instant.parse("2023-01-15T10:30:00.000Z"); + Date date = Date.from(instant); + + TestWithDate testObject = TestWithDate.builder() + .id("123") + .createdAt(instant) + .updatedAt(date) + .build(); + + String json = objectMapper.writeValueAsString(testObject); + assertThat(json).isEqualTo("{\"createdAt\":\"2023-01-15T10:30:00Z\",\"id\":\"123\",\"updatedAt\":\"2023-01-15T10:30:00.000Z\"}"); + } + + @Test + void objectMapper_shouldHandleEmptyObjectSerialization() { + ObjectMapper objectMapper = IbanityUtils.objectMapper(); + + TestPerson person = TestPerson.builder().build(); + + String json = objectMapper.writeValueAsString(person); + + assertThat(json).isEqualTo("{}"); + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + static class TestPerson { + private String name; + private String email; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + static class TestWithDate { + private String id; + private Instant createdAt; + private Date updatedAt; + } +} From 4663133ae982cdb971b07c378ce9c73a7c18a739 Mon Sep 17 00:00:00 2001 From: Marco De Toma Date: Sun, 4 Jan 2026 00:09:47 +0100 Subject: [PATCH 12/12] chore: optimize object mapper creation --- .../services/impl/UsageServiceImpl.java | 2 +- .../client/services/impl/ApiUrlProviderImpl.java | 2 +- .../com/ibanity/apis/client/utils/IbanityUtils.java | 12 +++++++----- .../webhooks/services/impl/WebhooksServiceImpl.java | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java index 5066cba7..2bc3b752 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/UsageServiceImpl.java @@ -44,7 +44,7 @@ public OrganizationUsage getOrganizationUsage(OrganizationUsageReadQuery readQue private OrganizationUsage map(JsonNode dataApiModel) { return OrganizationUsage.builder() - .id(dataApiModel.get("data").get("id").textValue()) + .id(dataApiModel.get("data").get("id").asString()) .paymentCount(new BigDecimal(dataApiModel.get("data").get("attributes").get("paymentCount").toString())) .accountCount(new BigDecimal(dataApiModel.get("data").get("attributes").get("accountCount").toString())) .paymentAccountCount(new BigDecimal(dataApiModel.get("data").get("attributes").get("paymentAccountCount").toString())) diff --git a/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java b/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java index 4f200c3e..cf37360d 100644 --- a/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java +++ b/src/main/java/com/ibanity/apis/client/services/impl/ApiUrlProviderImpl.java @@ -59,7 +59,7 @@ public String find(String rootPath, String[] subPaths) { return Stream.of(subPaths) .reduce(apiUrls, JsonNode::get, (jsonNode1, jsonNode2) -> jsonNode2) - .textValue(); + .asString(); } catch (Exception exception) { throw new IllegalArgumentException("Url cannot be found", exception); } diff --git a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java index 2f702df9..2c45084c 100644 --- a/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java +++ b/src/main/java/com/ibanity/apis/client/utils/IbanityUtils.java @@ -33,6 +33,12 @@ public final class IbanityUtils { private static final String CA_TRUST_STORE_KEY = "ibanity-ca"; private static final String TLS_PROTOCOL = "TLS"; + public static final ObjectMapper OBJECT_MAPPER = JsonMapper.builder() + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)) + .changeDefaultPropertyInclusion(incl -> incl.withContentInclusion(JsonInclude.Include.NON_NULL)) + .build(); + private IbanityUtils() { } @@ -73,11 +79,7 @@ public static HttpClient httpClient(IbanityConfiguration configuration) { } public static ObjectMapper objectMapper() { - return JsonMapper.builder() - .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) - .changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL)) - .changeDefaultPropertyInclusion(incl -> incl.withContentInclusion(JsonInclude.Include.NON_NULL)) - .build(); + return OBJECT_MAPPER; } private static void configureHttpClient(SSLContext sslContext, diff --git a/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java b/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java index 25619dd9..3618b2cf 100644 --- a/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java +++ b/src/main/java/com/ibanity/apis/client/webhooks/services/impl/WebhooksServiceImpl.java @@ -32,7 +32,7 @@ public IbanityWebhookEvent verifyAndParseEvent(String payload, String jwt) { verify(payload, jwt); try { JsonNode jsonNode = IbanityUtils.objectMapper().readTree(payload); - String type = jsonNode.get("data").get("type").textValue(); + String type = jsonNode.get("data").get("type").asString(); return WebhooksUtils.webhookEventParser(payload, type); } catch (JacksonException exception) { throw new IllegalArgumentException("Response cannot be parsed", exception);