From 9d84f89b34f506471897c7ada04fd65a990e5963 Mon Sep 17 00:00:00 2001 From: Bernd Bohmann Date: Wed, 29 Jan 2025 21:37:59 +0100 Subject: [PATCH 1/3] Ignore unknown json properties from newer Keycloak versions keycloak-config-cli should work with future versions of Keycloak server fixes #1265 --- CHANGELOG.md | 1 + .../config/provider/KeycloakProvider.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 412816734..37e737e75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Publish charts with github pages [#941](https://github.com/adorsys/keycloak-config-cli/issues/941) - Support for Keycloak 26.1 +- Ignore unknown json properties from newer Keycloak versions [#1265](https://github.com/adorsys/keycloak-config-cli/issues/1265) ### Fixed - Fix Initial Credentials Causes Update [819](https://github.com/adorsys/keycloak-config-cli/issues/819) diff --git a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java index 20be19461..146b21ec3 100644 --- a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java +++ b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java @@ -20,6 +20,8 @@ package de.adorsys.keycloak.config.provider; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import de.adorsys.keycloak.config.exception.KeycloakProviderException; import de.adorsys.keycloak.config.properties.KeycloakConfigProperties; import de.adorsys.keycloak.config.util.ResteasyUtil; @@ -28,6 +30,7 @@ import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.jboss.resteasy.client.jaxrs.internal.BasicAuthentication; +import org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; import org.slf4j.Logger; @@ -44,6 +47,7 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.Form; +import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; /** @@ -76,6 +80,7 @@ private KeycloakProvider(KeycloakConfigProperties properties) { public Keycloak getInstance() { if (keycloak == null || resteasyClient == null || keycloak.isClosed() || resteasyClient.isClosed()) { resteasyClient = resteasyClientSupplier.get(); + resteasyClient.register(JacksonProvider.class); keycloak = createKeycloak(); checkServerVersion(); @@ -233,4 +238,15 @@ private void logout() { public boolean isClosed() { return keycloak == null || keycloak.isClosed(); } + + public static class JacksonProvider extends ResteasyJackson2Provider { + public JacksonProvider() { + } + + public ObjectMapper locateMapper(Class type, MediaType mediaType) { + ObjectMapper objectMapper = super.locateMapper(type, mediaType); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + return objectMapper; + } + } } From 18ac338571487b9a176d55b9104a17ce8ab7d5a6 Mon Sep 17 00:00:00 2001 From: Bernd Bohmann Date: Wed, 29 Jan 2025 21:47:59 +0100 Subject: [PATCH 2/3] Ignore unknown json properties from newer Keycloak versions keycloak-config-cli should work with future versions of Keycloak server fixes #1265 --- .../de/adorsys/keycloak/config/provider/KeycloakProvider.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java index 146b21ec3..b306be23f 100644 --- a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java +++ b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java @@ -240,8 +240,6 @@ public boolean isClosed() { } public static class JacksonProvider extends ResteasyJackson2Provider { - public JacksonProvider() { - } public ObjectMapper locateMapper(Class type, MediaType mediaType) { ObjectMapper objectMapper = super.locateMapper(type, mediaType); From 7e95262a74cdd3a4346821fceb3e82126377519e Mon Sep 17 00:00:00 2001 From: Bernd Bohmann Date: Thu, 30 Jan 2025 09:06:24 +0100 Subject: [PATCH 3/3] Ignore unknown json properties from newer Keycloak versions keycloak-config-cli should work with future versions of Keycloak server fixes #1265 --- .../adorsys/keycloak/config/provider/KeycloakProvider.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java index b306be23f..f403995fa 100644 --- a/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java +++ b/src/main/java/de/adorsys/keycloak/config/provider/KeycloakProvider.java @@ -239,6 +239,13 @@ public boolean isClosed() { return keycloak == null || keycloak.isClosed(); } + /* + Similar to + https://github.com/keycloak/keycloak-client/blob/0ca751f23022c9295f2e7dc9fa72725e4380f4ed/admin-client/src/main/java/org/keycloak/admin/client/JacksonProvider.java + but without objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL). + JsonInclude.Include.NON_NULL will cause errors with some unit tests + in ImportClientsIT. + */ public static class JacksonProvider extends ResteasyJackson2Provider { public ObjectMapper locateMapper(Class type, MediaType mediaType) {