From 82c65c336214e764dd3d72a201ca4ed9beaa68bb Mon Sep 17 00:00:00 2001 From: Siri Varma Vegiraju Date: Fri, 13 Mar 2026 15:51:49 -0700 Subject: [PATCH 1/3] fix: Add default values to DaprClientProperties for Spring Boot apps When starting a Spring Boot application without explicitly setting DaprClientProperties, fields are now initialized with Dapr's standard defaults instead of null: httpEndpoint=http://localhost, grpcEndpoint=localhost, httpPort=3500, grpcPort=50001, apiToken=null. Fixes https://github.com/dapr/java-sdk/issues/1566 Co-Authored-By: Claude Opus 4.6 Signed-off-by: Siri Varma Vegiraju --- .../client/DaprClientProperties.java | 14 ++++-- .../client/DaprClientPropertiesTest.java | 46 +++++++++++++++---- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java b/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java index e8e18a6de..7ee064588 100644 --- a/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java +++ b/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java @@ -17,10 +17,16 @@ @ConfigurationProperties(prefix = "dapr.client") public class DaprClientProperties { - private String httpEndpoint; - private String grpcEndpoint; - private Integer httpPort; - private Integer grpcPort; + + public static final String DEFAULT_HTTP_ENDPOINT = "http://localhost"; + public static final String DEFAULT_GRPC_ENDPOINT = "localhost"; + public static final int DEFAULT_HTTP_PORT = 3500; + public static final int DEFAULT_GRPC_PORT = 50001; + + private String httpEndpoint = DEFAULT_HTTP_ENDPOINT; + private String grpcEndpoint = DEFAULT_GRPC_ENDPOINT; + private Integer httpPort = DEFAULT_HTTP_PORT; + private Integer grpcPort = DEFAULT_GRPC_PORT; private String apiToken; /** diff --git a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java index aeb6f4518..097b232f6 100644 --- a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java +++ b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java @@ -26,6 +26,21 @@ public class DaprClientPropertiesTest { private final ApplicationContextRunner runner = new ApplicationContextRunner() .withUserConfiguration(EnableDaprClientProperties.class); + @Test + @DisplayName("Should have correct default values when using no-arg constructor") + public void shouldHaveCorrectDefaults() { + + DaprClientProperties properties = new DaprClientProperties(); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(properties.getHttpEndpoint()).isEqualTo("http://localhost"); + softly.assertThat(properties.getGrpcEndpoint()).isEqualTo("localhost"); + softly.assertThat(properties.getHttpPort()).isEqualTo(3500); + softly.assertThat(properties.getGrpcPort()).isEqualTo(50001); + softly.assertThat(properties.getApiToken()).isNull(); + }); + } + @Test @DisplayName("Should create DaprClientProperties correctly through constructor") public void shouldCreateDaprClientPropertiesCorrectly() { @@ -49,21 +64,36 @@ public void shouldSetDaprClientPropertiesCorrectly() { DaprClientProperties properties = new DaprClientProperties(); - properties.setGrpcEndpoint("localhost"); - properties.setGrpcPort(50001); - properties.setHttpEndpoint("http://localhost"); - properties.setHttpPort(3500); + properties.setGrpcEndpoint("custom-host"); + properties.setGrpcPort(60001); + properties.setHttpEndpoint("http://custom-host"); + properties.setHttpPort(4500); properties.setApiToken("ABC"); SoftAssertions.assertSoftly(softAssertions -> { - softAssertions.assertThat(properties.getGrpcEndpoint()).isEqualTo("localhost"); - softAssertions.assertThat(properties.getHttpEndpoint()).isEqualTo("http://localhost"); - softAssertions.assertThat(properties.getHttpPort()).isEqualTo(3500); - softAssertions.assertThat(properties.getGrpcPort()).isEqualTo(50001); + softAssertions.assertThat(properties.getGrpcEndpoint()).isEqualTo("custom-host"); + softAssertions.assertThat(properties.getHttpEndpoint()).isEqualTo("http://custom-host"); + softAssertions.assertThat(properties.getHttpPort()).isEqualTo(4500); + softAssertions.assertThat(properties.getGrpcPort()).isEqualTo(60001); softAssertions.assertThat(properties.getApiToken()).isEqualTo("ABC"); }); } + @Test + @DisplayName("Should have correct defaults when no properties are configured") + public void shouldHaveDefaultsWhenNoPropertiesConfigured() { + runner.run(context -> { + DaprClientProperties properties = context.getBean(DaprClientProperties.class); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(properties.getHttpEndpoint()).isEqualTo("http://localhost"); + softly.assertThat(properties.getGrpcEndpoint()).isEqualTo("localhost"); + softly.assertThat(properties.getHttpPort()).isEqualTo(3500); + softly.assertThat(properties.getGrpcPort()).isEqualTo(50001); + softly.assertThat(properties.getApiToken()).isNull(); + }); + }); + } + @Test @DisplayName("Should map DaprClient properties correctly") public void shouldMapDaprClientProperties() { From d42b81465f4687b214ec86cd5176a85a1a3de1dc Mon Sep 17 00:00:00 2001 From: Siri Varma Vegiraju Date: Fri, 13 Mar 2026 16:19:06 -0700 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Siri Varma Vegiraju --- .../client/DaprClientProperties.java | 16 ++++++++-------- .../client/DaprClientPropertiesTest.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java b/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java index 7ee064588..d887f9b4a 100644 --- a/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java +++ b/dapr-spring/dapr-spring-boot-properties/src/main/java/io/dapr/spring/boot/properties/client/DaprClientProperties.java @@ -23,10 +23,10 @@ public class DaprClientProperties { public static final int DEFAULT_HTTP_PORT = 3500; public static final int DEFAULT_GRPC_PORT = 50001; - private String httpEndpoint = DEFAULT_HTTP_ENDPOINT; - private String grpcEndpoint = DEFAULT_GRPC_ENDPOINT; - private Integer httpPort = DEFAULT_HTTP_PORT; - private Integer grpcPort = DEFAULT_GRPC_PORT; + private String httpEndpoint; + private String grpcEndpoint; + private Integer httpPort; + private Integer grpcPort; private String apiToken; /** @@ -53,19 +53,19 @@ public DaprClientProperties(String httpEndpoint, String grpcEndpoint, Integer ht } public String getHttpEndpoint() { - return httpEndpoint; + return (httpEndpoint != null) ? httpEndpoint : DEFAULT_HTTP_ENDPOINT; } public String getGrpcEndpoint() { - return grpcEndpoint; + return (grpcEndpoint != null) ? grpcEndpoint : DEFAULT_GRPC_ENDPOINT; } public Integer getHttpPort() { - return httpPort; + return (httpPort != null) ? httpPort : DEFAULT_HTTP_PORT; } public Integer getGrpcPort() { - return grpcPort; + return (grpcPort != null) ? grpcPort : DEFAULT_GRPC_PORT; } public void setHttpEndpoint(String httpEndpoint) { diff --git a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java index 097b232f6..4a092ee8d 100644 --- a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java +++ b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java @@ -135,6 +135,25 @@ public void shouldMapDaprClientPropertiesCamelCase() { }); } + @Test + @DisplayName("Should honor legacy dapr.* system properties when dapr.client.* is not configured") + public void shouldHonorLegacyDaprSystemPropertiesWhenClientPropertiesNotConfigured() { + runner.withSystemProperties( + "dapr.http.endpoint=http://legacy-host", + "dapr.http.port=3600", + "dapr.grpc.endpoint=legacy-host", + "dapr.grpc.port=60001" + ).run(context -> { + DaprClientProperties properties = context.getBean(DaprClientProperties.class); + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(properties.getHttpEndpoint()).isEqualTo("http://legacy-host"); + softly.assertThat(properties.getHttpPort()).isEqualTo(3600); + softly.assertThat(properties.getGrpcEndpoint()).isEqualTo("legacy-host"); + softly.assertThat(properties.getGrpcPort()).isEqualTo(60001); + }); + }); + } + @EnableConfigurationProperties(DaprClientProperties.class) static class EnableDaprClientProperties { From f83cd7278ef17e315c69b91b5eae6cd1a4cdcf2f Mon Sep 17 00:00:00 2001 From: Siri Varma Vegiraju Date: Fri, 13 Mar 2026 17:36:36 -0700 Subject: [PATCH 3/3] Update DaprClientPropertiesTest.java Signed-off-by: Siri Varma Vegiraju --- .../client/DaprClientPropertiesTest.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java index 4a092ee8d..097b232f6 100644 --- a/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java +++ b/dapr-spring/dapr-spring-boot-properties/src/test/java/io/dapr/spring/boot/properties/client/DaprClientPropertiesTest.java @@ -135,25 +135,6 @@ public void shouldMapDaprClientPropertiesCamelCase() { }); } - @Test - @DisplayName("Should honor legacy dapr.* system properties when dapr.client.* is not configured") - public void shouldHonorLegacyDaprSystemPropertiesWhenClientPropertiesNotConfigured() { - runner.withSystemProperties( - "dapr.http.endpoint=http://legacy-host", - "dapr.http.port=3600", - "dapr.grpc.endpoint=legacy-host", - "dapr.grpc.port=60001" - ).run(context -> { - DaprClientProperties properties = context.getBean(DaprClientProperties.class); - SoftAssertions.assertSoftly(softly -> { - softly.assertThat(properties.getHttpEndpoint()).isEqualTo("http://legacy-host"); - softly.assertThat(properties.getHttpPort()).isEqualTo(3600); - softly.assertThat(properties.getGrpcEndpoint()).isEqualTo("legacy-host"); - softly.assertThat(properties.getGrpcPort()).isEqualTo(60001); - }); - }); - } - @EnableConfigurationProperties(DaprClientProperties.class) static class EnableDaprClientProperties {