From 97f53c71d275e7544c7d757cc0fecb3fb0889109 Mon Sep 17 00:00:00 2001 From: Steve Hawkins Date: Mon, 14 Nov 2022 09:00:16 -0500 Subject: [PATCH] fix #3923: removing kind only from registered classes --- .../internal/KubernetesDeserializer.java | 25 ++++++++++--------- .../internal/KubernetesDeserializerTest.java | 14 ++--------- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java index e13f1f698d..7aa89cbfdd 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/main/java/io/fabric8/kubernetes/internal/KubernetesDeserializer.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; @@ -113,7 +114,7 @@ private static KubernetesResource fromObjectNode(JsonParser jp, JsonNode node) t TypeKey key = getKey(node); Class resourceType = mapping.getForKey(key); if (resourceType == null) { - if (key == null || (key.version == null && key.apiGroup == null)) { + if (key == null) { // just a wrapper around a map // if this raw mapping typed as HasMetadata, a failure will result return jp.getCodec().treeToValue(node, RawExtension.class); @@ -171,24 +172,21 @@ public Class getForKey(TypeKey key) { } public void registerKind(String apiVersion, String kind, Class clazz) { - mappings.put(createKey(apiVersion, kind), clazz); + Optional.ofNullable(createKey(apiVersion, kind)).ifPresent(k -> mappings.put(k, clazz)); } /** * Returns a composite key for apiVersion and kind. */ TypeKey createKey(String apiVersion, String kind) { - if (kind == null) { + if (kind == null || apiVersion == null) { return null; - } else if (apiVersion == null) { - return new TypeKey(kind, null, null); - } else { - String[] versionParts = new String[] { null, apiVersion }; - if (apiVersion.contains("/")) { - versionParts = apiVersion.split("/", 2); - } - return new TypeKey(kind, versionParts[0], versionParts[1]); } + String[] versionParts = new String[] { null, apiVersion }; + if (apiVersion.contains("/")) { + versionParts = apiVersion.split("/", 2); + } + return new TypeKey(kind, versionParts[0], versionParts[1]); } private void registerClasses(ClassLoader classLoader) { @@ -209,11 +207,14 @@ TypeKey getKeyFromClass(Class clazz) { } else if (apiVersion != null && !apiVersion.isEmpty()) { return createKey(apiVersion, kind); } - return new TypeKey(kind, null, null); + return null; } private void addMapping(Class clazz) { TypeKey keyFromClass = getKeyFromClass(clazz); + if (keyFromClass == null) { + return; + } mappings.put(keyFromClass, clazz); // oc behavior - allow resolving against just the version diff --git a/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java b/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java index 673925d440..8af525b35c 100644 --- a/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java +++ b/kubernetes-model-generator/kubernetes-model-core/src/test/java/io/fabric8/kubernetes/internal/KubernetesDeserializerTest.java @@ -52,17 +52,7 @@ void shouldRegisterKind() { } @Test - void shouldNPEIfRegisterNullKind() { - // given - // when - assertThrows(NullPointerException.class, () -> { - mapping.registerKind("version1", null, SmurfResource.class); - }); - // then throws - } - - @Test - void shouldRegisterKindWithoutVersionIfNullVersion() { + void shouldNotRegisterKindWithoutVersionIfNullVersion() { // given String version = null; String kind = "kind1"; @@ -71,7 +61,7 @@ void shouldRegisterKindWithoutVersionIfNullVersion() { mapping.registerKind(version, kind, SmurfResource.class); // then Class clazz = mapping.getForKey(key); - assertThat(clazz).isEqualTo(SmurfResource.class); + assertThat(clazz).isNull(); } @Test