diff --git a/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java b/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java index 128c929ec0e..dc3ea39317c 100644 --- a/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java +++ b/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java @@ -582,8 +582,8 @@ public ManagedChannelImplBuilder defaultServiceConfig(@Nullable Map s parsedMap.put(key, checkListEntryTypes((List) value)); } else if (value instanceof String) { parsedMap.put(key, value); - } else if (value instanceof Double) { - parsedMap.put(key, value); + } else if (value instanceof Number) { + parsedMap.put(key, ((Number) value).doubleValue()); } else if (value instanceof Boolean) { parsedMap.put(key, value); } else { @@ -606,8 +606,8 @@ private static List checkListEntryTypes(List list) { parsedList.add(checkListEntryTypes((List) value)); } else if (value instanceof String) { parsedList.add(value); - } else if (value instanceof Double) { - parsedList.add(value); + } else if (value instanceof Number) { + parsedList.add(((Number) value).doubleValue()); } else if (value instanceof Boolean) { parsedList.add(value); } else { diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java index b0939239477..011fcb316c7 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java @@ -735,9 +735,31 @@ public void defaultServiceConfig_intKey() { @Test public void defaultServiceConfig_intValue() { Map config = new HashMap<>(); + config.put("key", 3); - assertThrows(IllegalArgumentException.class, () -> builder.defaultServiceConfig(config)); + builder.defaultServiceConfig(config); + + assertThat(builder.defaultServiceConfig).containsEntry("key", 3D); + } + + @Test + public void defaultServiceConfig_nestedIntValue() { + Map config = new HashMap<>(); + List list = new ArrayList<>(); + Map nested = new HashMap<>(); + + list.add(123); + nested.put("key", 456); + list.add(nested); + config.put("list", list); + + builder.defaultServiceConfig(config); + + assertThat(builder.defaultServiceConfig) + .containsEntry( + "list", + Arrays.asList(123D, Collections.singletonMap("key", 456D))); } @Test