Skip to content

Commit 0cd0c6d

Browse files
authored
Merge pull request kubernetes-client#2553 from eamonnmcmanus/typeadapterfactory
Fix `DynamicKubernetesTypeAdaptorFactory` when it does not apply.
2 parents 7eb0915 + 04e3ef6 commit 0cd0c6d

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

util/src/main/java/io/kubernetes/client/util/generic/dynamic/DynamicKubernetesTypeAdaptorFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
3434
if (shouldHandleAsListObject(typeToken)) {
3535
return (TypeAdapter<T>) (new GenericListObjectCreator(gson));
3636
}
37-
return gson.getDelegateAdapter(this, typeToken);
37+
return null;
3838
}
3939

4040
private boolean shouldHandleAsSingleObject(TypeToken typeToken) {

util/src/test/java/io/kubernetes/client/util/generic/dynamic/DynamicKubernetesTypeAdaptorFactoryTest.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import io.kubernetes.client.common.KubernetesListObject;
2020
import io.kubernetes.client.common.KubernetesObject;
2121
import io.kubernetes.client.openapi.models.V1ObjectMeta;
22+
import java.util.Collections;
23+
import java.util.Map;
2224
import org.junit.Before;
2325
import org.junit.Test;
2426

@@ -37,13 +39,12 @@ public class DynamicKubernetesTypeAdaptorFactoryTest {
3739
.append("}")
3840
.toString();
3941

42+
private final DynamicKubernetesTypeAdaptorFactory factory =
43+
new DynamicKubernetesTypeAdaptorFactory();
44+
4045
@Before
4146
public void setup() {
42-
gson =
43-
new Gson()
44-
.newBuilder()
45-
.registerTypeAdapterFactory(new DynamicKubernetesTypeAdaptorFactory())
46-
.create();
47+
gson = new Gson().newBuilder().registerTypeAdapterFactory(factory).create();
4748
}
4849

4950
@Test
@@ -79,4 +80,13 @@ public void testListDynamicObjectRoundTrip() {
7980
String dumped = gson.toJson(dynamicListObj);
8081
assertEquals(listJsonContent, dumped);
8182
}
83+
84+
// Registering the same factory twice is not a good idea, but we should not explode if it happens.
85+
// See https://github.com/google/gson/issues/2312
86+
@Test
87+
public void testMultipleRegistration() {
88+
Gson badGson = gson.newBuilder().registerTypeAdapterFactory(factory).create();
89+
Object x = badGson.fromJson("{}", Map.class);
90+
assertEquals(Collections.emptyMap(), x);
91+
}
8292
}

0 commit comments

Comments
 (0)