diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c981ba1ee..fcb0d28eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: matrix: java: [ 11, 13, 15, 16 ] env: - GOVER: 1.17.7 + GOVER: 1.19 GOOS: linux GOARCH: amd64 GOPROXY: https://proxy.golang.org @@ -29,7 +29,7 @@ jobs: DAPR_RUNTIME_VER: 1.8.0-rc.3 DAPR_INSTALL_URL: https://raw.githubusercontent.com/dapr/cli/v1.8.0-rc.1/install/install.sh DAPR_CLI_REF: - DAPR_REF: + DAPR_REF: 683a436ff1367e4ff2d27da2d79069c04ec2c46d steps: - uses: actions/checkout@v3 - name: Set up OpenJDK ${{ env.JDK_VER }} diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 018bf021f..c650af082 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -31,7 +31,7 @@ jobs: matrix: java: [ 11, 13, 15, 16 ] env: - GOVER: 1.17.7 + GOVER: 1.19 GOOS: linux GOARCH: amd64 GOPROXY: https://proxy.golang.org @@ -40,7 +40,7 @@ jobs: DAPR_RUNTIME_VER: 1.8.0-rc.3 DAPR_INSTALL_URL: https://raw.githubusercontent.com/dapr/cli/v1.8.0-rc.1/install/install.sh DAPR_CLI_REF: - DAPR_REF: + DAPR_REF: 683a436ff1367e4ff2d27da2d79069c04ec2c46d steps: - uses: actions/checkout@v3 - name: Set up OpenJDK ${{ env.JDK_VER }} diff --git a/examples/src/main/java/io/dapr/examples/configuration/grpc/ConfigurationClient.java b/examples/src/main/java/io/dapr/examples/configuration/grpc/ConfigurationClient.java index f586999bf..ff49c243d 100644 --- a/examples/src/main/java/io/dapr/examples/configuration/grpc/ConfigurationClient.java +++ b/examples/src/main/java/io/dapr/examples/configuration/grpc/ConfigurationClient.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicReference; public class ConfigurationClient { @@ -72,9 +73,9 @@ public class ConfigurationClient { public static void getConfigurationsUsingVarargs(DaprPreviewClient client) { System.out.println("*******trying to retrieve configurations for a variable no. of keys********"); try { - Mono> items = + Mono> items = client.getConfiguration(CONFIG_STORE_NAME, "myconfig1", "myconfig3"); - items.block().forEach(ConfigurationClient::print); + items.block().forEach((k,v) -> print(v, k)); } catch (Exception ex) { System.out.println(ex.getMessage()); } @@ -93,8 +94,8 @@ public class ConfigurationClient { keys.add("myconfig3"); GetConfigurationRequest req = new GetConfigurationRequest(CONFIG_STORE_NAME, keys); try { - Mono> items = client.getConfiguration(req); - items.block().forEach(ConfigurationClient::print); + Mono> items = client.getConfiguration(req); + items.block().forEach((k,v) -> print(v, k)); } catch (Exception ex) { System.out.println(ex.getMessage()); } @@ -110,10 +111,10 @@ public class ConfigurationClient { AtomicReference disposableAtomicReference = new AtomicReference<>(); SubscribeConfigurationRequest req = new SubscribeConfigurationRequest(CONFIG_STORE_NAME, keys); Runnable subscribeTask = () -> { - Flux> outFlux = client.subscribeToConfiguration(req); + Flux> outFlux = client.subscribeToConfiguration(req); disposableAtomicReference.set(outFlux .subscribe( - cis -> cis.forEach(ConfigurationClient::print) + cis -> cis.forEach((k,v) -> print(v, k)) )); }; new Thread(subscribeTask).start(); @@ -140,8 +141,8 @@ public class ConfigurationClient { } } - private static void print(ConfigurationItem item) { - System.out.println(item.getValue() + " : key ->" + item.getKey()); + private static void print(ConfigurationItem item, String key) { + System.out.println(item.getValue() + " : key ->" + key); } private static void executeDockerCommand(int postfix) { diff --git a/pom.xml b/pom.xml index 09ad3eaf4..17856f029 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ UTF-8 1.42.1 3.17.3 - https://raw.githubusercontent.com/dapr/dapr/v1.7.0-rc.2/dapr/proto + https://raw.githubusercontent.com/dapr/dapr/683a436ff1367e4ff2d27da2d79069c04ec2c46d/dapr/proto 1.6.2 3.1.1 1.8 diff --git a/sdk-tests/src/test/java/io/dapr/it/configuration/grpc/ConfigurationClientIT.java b/sdk-tests/src/test/java/io/dapr/it/configuration/grpc/ConfigurationClientIT.java index 7a6b39565..d2143143f 100644 --- a/sdk-tests/src/test/java/io/dapr/it/configuration/grpc/ConfigurationClientIT.java +++ b/sdk-tests/src/test/java/io/dapr/it/configuration/grpc/ConfigurationClientIT.java @@ -78,7 +78,6 @@ public class ConfigurationClientIT extends BaseIT { @Test public void getConfiguration() { ConfigurationItem ci = daprPreviewClient.getConfiguration(CONFIG_STORE_NAME, "myconfigkey1").block(); - assertEquals(ci.getKey(), "myconfigkey1"); assertEquals(ci.getValue(), "myconfigvalue1"); } @@ -91,10 +90,11 @@ public class ConfigurationClientIT extends BaseIT { @Test public void getConfigurations() { - List cis = daprPreviewClient.getConfiguration(CONFIG_STORE_NAME, "myconfigkey1", "myconfigkey2").block(); + Map cis = daprPreviewClient.getConfiguration(CONFIG_STORE_NAME, "myconfigkey1", "myconfigkey2").block(); assertTrue(cis.size() == 2); - assertEquals(cis.get(0).getKey(), "myconfigkey1"); - assertEquals(cis.get(1).getValue(), "myconfigvalue2"); + assertTrue(cis.containsKey("myconfigkey1")); + assertTrue(cis.containsKey("myconfigkey2")); + assertEquals(cis.get("myconfigkey2").getValue(), "myconfigvalue2"); } @Test @@ -111,10 +111,13 @@ public class ConfigurationClientIT extends BaseIT { List updatedValues = new ArrayList<>(); AtomicReference disposable = new AtomicReference<>(); Runnable subscribeTask = () -> { - Flux> outFlux = daprPreviewClient + Flux> outFlux = daprPreviewClient .subscribeToConfiguration(CONFIG_STORE_NAME, "myconfigkey1", "myconfigkey2"); disposable.set(outFlux.subscribe(update -> { - updatedValues.add(update.get(0).getValue()); + updatedValues.add(update.entrySet() + .stream() + .findFirst() + .get().getValue().getValue()); })); }; Thread subscribeThread = new Thread(subscribeTask); diff --git a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java index 099904095..417746705 100644 --- a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java +++ b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java @@ -504,7 +504,7 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { @Override public Mono getConfiguration(String storeName, String key) { GetConfigurationRequest request = new GetConfigurationRequest(storeName, filterEmptyKeys(key)); - return this.getConfiguration(request).map(data -> data.get(0)); + return this.getConfiguration(request).map(data -> data.get(key)); } /** @@ -514,14 +514,14 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { public Mono getConfiguration(String storeName, String key, Map metadata) { GetConfigurationRequest request = new GetConfigurationRequest(storeName, filterEmptyKeys(key)); request.setMetadata(metadata); - return this.getConfiguration(request).map(data -> data.get(0)); + return this.getConfiguration(request).map(data -> data.get(key)); } /** * {@inheritDoc} */ @Override - public Mono> getConfiguration(String storeName, String... keys) { + public Mono> getConfiguration(String storeName, String... keys) { List listOfKeys = filterEmptyKeys(keys); GetConfigurationRequest request = new GetConfigurationRequest(storeName, listOfKeys); return this.getConfiguration(request); @@ -531,7 +531,7 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { * {@inheritDoc} */ @Override - public Mono> getConfiguration( + public Mono> getConfiguration( String storeName, List keys, Map metadata) { @@ -543,7 +543,7 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { /** * {@inheritDoc} */ - public Flux> subscribeToConfiguration(String storeName, String... keys) { + public Flux> subscribeToConfiguration(String storeName, String... keys) { List listOfKeys = filterEmptyKeys(keys); SubscribeConfigurationRequest request = new SubscribeConfigurationRequest(storeName, listOfKeys); return this.subscribeToConfiguration(request); @@ -552,7 +552,7 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { /** * {@inheritDoc} */ - public Flux> subscribeToConfiguration( + public Flux> subscribeToConfiguration( String storeName, List keys, Map metadata) { diff --git a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java index 39f0d227b..593b37af4 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java @@ -63,6 +63,8 @@ import reactor.util.context.Context; import java.io.Closeable; import java.io.IOException; import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -766,7 +768,7 @@ public class DaprClientGrpc extends AbstractDaprClient { * {@inheritDoc} */ @Override - public Mono> getConfiguration(GetConfigurationRequest request) { + public Mono> getConfiguration(GetConfigurationRequest request) { try { final String configurationStoreName = request.getStoreName(); final Map metadata = request.getMetadata(); @@ -791,16 +793,22 @@ public class DaprClientGrpc extends AbstractDaprClient { } } - private Mono> getConfigurationAlpha1(DaprProtos.GetConfigurationRequest envelope) { + private Mono> getConfigurationAlpha1(DaprProtos.GetConfigurationRequest envelope) { return Mono.subscriberContext().flatMap( context -> this.createMono( it -> intercept(context, asyncStub).getConfigurationAlpha1(envelope, it) ) ).map( - it -> - it.getItemsList().stream() - .map(this::buildConfigurationItem).collect(Collectors.toList()) + it -> { + Map configMap = new HashMap<>(); + Iterator> itr = it.getItems().entrySet().iterator(); + while (itr.hasNext()) { + Map.Entry entry = itr.next(); + configMap.put(entry.getKey(), buildConfigurationItem(entry.getValue(), entry.getKey())); + } + return Collections.unmodifiableMap(configMap); + } ); } @@ -808,7 +816,7 @@ public class DaprClientGrpc extends AbstractDaprClient { * {@inheritDoc} */ @Override - public Flux> subscribeToConfiguration(SubscribeConfigurationRequest request) { + public Flux> subscribeToConfiguration(SubscribeConfigurationRequest request) { try { final String configurationStoreName = request.getStoreName(); final List keys = request.getKeys(); @@ -831,9 +839,15 @@ public class DaprClientGrpc extends AbstractDaprClient { return this.createFlux( it -> intercept(asyncStub).subscribeConfigurationAlpha1(envelope, it) ).map( - it -> - it.getItemsList().stream() - .map(this::buildConfigurationItem).collect(Collectors.toList()) + it -> { + Map configMap = new HashMap<>(); + Iterator> itr = it.getItems().entrySet().iterator(); + while (itr.hasNext()) { + Map.Entry entry = itr.next(); + configMap.put(entry.getKey(), buildConfigurationItem(entry.getValue(), entry.getKey())); + } + return Collections.unmodifiableMap(configMap); + } ); } catch (Exception ex) { return DaprException.wrapFlux(ex); @@ -847,10 +861,10 @@ public class DaprClientGrpc extends AbstractDaprClient { * @return io.dapr.client.domain.ConfigurationItem */ private ConfigurationItem buildConfigurationItem( - CommonProtos.ConfigurationItem configurationItem) { + CommonProtos.ConfigurationItem configurationItem, String key) { return new ConfigurationItem( - configurationItem.getKey(), - configurationItem.getValue(), + key, + configurationItem.getValue(), configurationItem.getVersion(), configurationItem.getMetadataMap() ); diff --git a/sdk/src/main/java/io/dapr/client/DaprClientHttp.java b/sdk/src/main/java/io/dapr/client/DaprClientHttp.java index f5fb5c088..0d42af879 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientHttp.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientHttp.java @@ -767,7 +767,7 @@ public class DaprClientHttp extends AbstractDaprClient { * {@inheritDoc} */ @Override - public Mono> getConfiguration(GetConfigurationRequest request) { + public Mono> getConfiguration(GetConfigurationRequest request) { return DaprException.wrapMono(new UnsupportedOperationException()); } @@ -775,7 +775,7 @@ public class DaprClientHttp extends AbstractDaprClient { * {@inheritDoc} */ @Override - public Flux> subscribeToConfiguration(SubscribeConfigurationRequest request) { + public Flux> subscribeToConfiguration(SubscribeConfigurationRequest request) { return DaprException.wrapFlux(new UnsupportedOperationException()); } diff --git a/sdk/src/main/java/io/dapr/client/DaprPreviewClient.java b/sdk/src/main/java/io/dapr/client/DaprPreviewClient.java index 2928ba747..040f3d74f 100644 --- a/sdk/src/main/java/io/dapr/client/DaprPreviewClient.java +++ b/sdk/src/main/java/io/dapr/client/DaprPreviewClient.java @@ -53,41 +53,42 @@ public interface DaprPreviewClient extends AutoCloseable { Mono getConfiguration(String storeName, String key, Map metadata); /** - * Retrieve List of configurations based on a provided variable number of keys. + * Retrieve Map of configurations based on a provided variable number of keys. * * @param storeName Name of the configuration store * @param keys keys of the configurations which are to be retrieved - * @return Mono of List of ConfigurationItems + * @return Mono of Map of ConfigurationItems */ - Mono> getConfiguration(String storeName, String... keys); + Mono> getConfiguration(String storeName, String... keys); /** - * Retrieve List of configurations based on a provided variable number of keys. + * Retrieve Map of configurations based on a provided variable number of keys. * * @param storeName Name of the configuration store * @param keys keys of the configurations which are to be retrieved * @param metadata optional metadata - * @return Mono of List of ConfigurationItems + * @return Mono of Map of ConfigurationItems */ - Mono> getConfiguration(String storeName, List keys, Map metadata); + Mono> getConfiguration(String storeName, List keys, + Map metadata); /** - * Retrieve List of configurations based on a provided configuration request object. + * Retrieve Map of configurations based on a provided configuration request object. * * @param request request for retrieving Configurations for a list keys - * @return Mono of List of ConfigurationItems + * @return Mono of Map of ConfigurationItems */ - Mono> getConfiguration(GetConfigurationRequest request); + Mono> getConfiguration(GetConfigurationRequest request); /** * Subscribe to the keys for any change. * * @param storeName Name of the configuration store * @param keys keys of the configurations which are to be subscribed - * @return Flux of List of configuration items + * @return Flux of Map of configuration items */ - Flux> subscribeToConfiguration(String storeName, String... keys); + Flux> subscribeToConfiguration(String storeName, String... keys); /** * Subscribe to the keys for any change. @@ -95,18 +96,18 @@ public interface DaprPreviewClient extends AutoCloseable { * @param storeName Name of the configuration store * @param keys keys of the configurations which are to be subscribed * @param metadata optional metadata - * @return Flux of List of configuration items + * @return Flux of Map of configuration items */ - Flux> subscribeToConfiguration(String storeName, List keys, + Flux> subscribeToConfiguration(String storeName, List keys, Map metadata); /** * Subscribe to the keys for any change. * * @param request request for subscribing to any change for the given keys in request - * @return Flux of List of configuration items + * @return Flux of Map of configuration items */ - Flux> subscribeToConfiguration(SubscribeConfigurationRequest request); + Flux> subscribeToConfiguration(SubscribeConfigurationRequest request); /** * Query for states using a query string. diff --git a/sdk/src/test/java/io/dapr/client/DaprPreviewClientGrpcTest.java b/sdk/src/test/java/io/dapr/client/DaprPreviewClientGrpcTest.java index 8219ac8f5..2b3981dec 100644 --- a/sdk/src/test/java/io/dapr/client/DaprPreviewClientGrpcTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprPreviewClientGrpcTest.java @@ -110,7 +110,6 @@ public class DaprPreviewClientGrpcTest { }).when(daprStub).getConfigurationAlpha1(any(DaprProtos.GetConfigurationRequest.class), any()); ConfigurationItem ci = previewClient.getConfiguration(CONFIG_STORE_NAME, "configkey1").block(); - assertEquals("configkey1", ci.getKey()); assertEquals("configvalue1", ci.getValue()); assertEquals("1", ci.getVersion()); } @@ -128,7 +127,6 @@ public class DaprPreviewClientGrpcTest { Map reqMetadata = new HashMap<>(); reqMetadata.put("meta1", "value1"); ConfigurationItem ci = previewClient.getConfiguration(CONFIG_STORE_NAME, "configkey1", reqMetadata).block(); - assertEquals("configkey1", ci.getKey()); assertEquals("configvalue1", ci.getValue()); assertEquals("1", ci.getVersion()); } @@ -143,15 +141,14 @@ public class DaprPreviewClientGrpcTest { return null; }).when(daprStub).getConfigurationAlpha1(any(DaprProtos.GetConfigurationRequest.class), any()); - List cis = previewClient.getConfiguration(CONFIG_STORE_NAME, "configkey1","configkey2").block(); + Map cis = previewClient.getConfiguration(CONFIG_STORE_NAME, "configkey1","configkey2").block(); assertEquals(2, cis.size()); - assertEquals("configkey1", cis.stream().findFirst().get().getKey()); - assertEquals("configvalue1", cis.stream().findFirst().get().getValue()); - assertEquals("1", cis.stream().findFirst().get().getVersion()); - - assertEquals("configkey2", cis.stream().skip(1).findFirst().get().getKey()); - assertEquals("configvalue2", cis.stream().skip(1).findFirst().get().getValue()); - assertEquals("1", cis.stream().skip(1).findFirst().get().getVersion()); + assertTrue("configkey1", cis.containsKey("configkey1")); + assertEquals("configvalue1", cis.get("configkey1").getValue()); + assertEquals("1", cis.get("configkey1").getVersion()); + assertTrue("configkey2", cis.containsKey("configkey2")); + assertEquals("configvalue2", cis.get("configkey2").getValue()); + assertEquals("1", cis.get("configkey2").getVersion()); } @Test @@ -167,23 +164,24 @@ public class DaprPreviewClientGrpcTest { Map reqMetadata = new HashMap<>(); reqMetadata.put("meta1", "value1"); List keys = Arrays.asList("configkey1","configkey2"); - List cis = previewClient.getConfiguration(CONFIG_STORE_NAME, keys, reqMetadata).block(); + Map cis = previewClient.getConfiguration(CONFIG_STORE_NAME, keys, reqMetadata).block(); assertEquals(2, cis.size()); - assertEquals("configkey1", cis.stream().findFirst().get().getKey()); - assertEquals("configvalue1", cis.stream().findFirst().get().getValue()); + assertTrue("configkey1", cis.containsKey("configkey1")); + assertEquals("configvalue1", cis.get("configkey1").getValue()); } @Test public void subscribeConfigurationTest() { Map metadata = new HashMap<>(); metadata.put("meta1", "value1"); + Map configs = new HashMap<>(); + configs.put("configkey1", CommonProtos.ConfigurationItem.newBuilder() + .setValue("configvalue1") + .setVersion("1") + .putAllMetadata(metadata) + .build()); DaprProtos.SubscribeConfigurationResponse responseEnvelope = DaprProtos.SubscribeConfigurationResponse.newBuilder() - .addItems(CommonProtos.ConfigurationItem.newBuilder() - .setKey("configkey1") - .setValue("configvalue1") - .setVersion("1") - .putAllMetadata(metadata) - .build()) + .putAllItems(configs) .build(); doAnswer((Answer) invocation -> { @@ -194,23 +192,24 @@ public class DaprPreviewClientGrpcTest { return null; }).when(daprStub).subscribeConfigurationAlpha1(any(DaprProtos.SubscribeConfigurationRequest.class), any()); - Iterator> itr = previewClient.subscribeToConfiguration(CONFIG_STORE_NAME, "configkey1").toIterable().iterator(); + Iterator> itr = previewClient.subscribeToConfiguration(CONFIG_STORE_NAME, "configkey1").toIterable().iterator(); assertTrue(itr.hasNext()); - assertEquals("configkey1", itr.next().get(0).getKey()); - assertFalse(itr.hasNext()); + assertTrue(itr.next().containsKey("configkey1")); + assertFalse(itr.hasNext()); } @Test public void subscribeConfigurationTestWithMetadata() { Map metadata = new HashMap<>(); metadata.put("meta1", "value1"); + Map configs = new HashMap<>(); + configs.put("configkey1", CommonProtos.ConfigurationItem.newBuilder() + .setValue("configvalue1") + .setVersion("1") + .putAllMetadata(metadata) + .build()); DaprProtos.SubscribeConfigurationResponse responseEnvelope = DaprProtos.SubscribeConfigurationResponse.newBuilder() - .addItems(CommonProtos.ConfigurationItem.newBuilder() - .setKey("configkey1") - .setValue("configvalue1") - .setVersion("1") - .putAllMetadata(metadata) - .build()) + .putAllItems(configs) .build(); doAnswer((Answer) invocation -> { @@ -224,10 +223,10 @@ public class DaprPreviewClientGrpcTest { Map reqMetadata = new HashMap<>(); List keys = Arrays.asList("configkey1"); - Iterator> itr = previewClient.subscribeToConfiguration(CONFIG_STORE_NAME, keys, reqMetadata).toIterable().iterator(); + Iterator> itr = previewClient.subscribeToConfiguration(CONFIG_STORE_NAME, "configkey1").toIterable().iterator(); assertTrue(itr.hasNext()); - assertEquals("configkey1", itr.next().get(0).getKey()); - assertFalse(itr.hasNext()); + assertTrue(itr.next().containsKey("configkey1")); + assertFalse(itr.hasNext()); } @Test @@ -257,33 +256,34 @@ public class DaprPreviewClientGrpcTest { private DaprProtos.GetConfigurationResponse getSingleMockResponse() { Map metadata = new HashMap<>(); metadata.put("meta1", "value1"); + Map configs = new HashMap<>(); + configs.put("configkey1", CommonProtos.ConfigurationItem.newBuilder() + .setValue("configvalue1") + .setVersion("1") + .putAllMetadata(metadata) + .build()); DaprProtos.GetConfigurationResponse responseEnvelope = DaprProtos.GetConfigurationResponse.newBuilder() - .addItems(CommonProtos.ConfigurationItem.newBuilder() - .setKey("configkey1") - .setValue("configvalue1") - .setVersion("1") - .putAllMetadata(metadata) - .build() - ).build(); + .putAllItems(configs) + .build(); return responseEnvelope; } private DaprProtos.GetConfigurationResponse getMultipleMockResponse() { Map metadata = new HashMap<>(); metadata.put("meta1", "value1"); + Map configs = new HashMap<>(); + configs.put("configkey1", CommonProtos.ConfigurationItem.newBuilder() + .setValue("configvalue1") + .setVersion("1") + .putAllMetadata(metadata) + .build()); + configs.put("configkey2", CommonProtos.ConfigurationItem.newBuilder() + .setValue("configvalue2") + .setVersion("1") + .putAllMetadata(metadata) + .build()); DaprProtos.GetConfigurationResponse responseEnvelope = DaprProtos.GetConfigurationResponse.newBuilder() - .addItems(CommonProtos.ConfigurationItem.newBuilder() - .setKey("configkey1") - .setValue("configvalue1") - .setVersion("1") - .putAllMetadata(metadata) - .build()) - .addItems(CommonProtos.ConfigurationItem.newBuilder() - .setKey("configkey2") - .setValue("configvalue2") - .setVersion("1") - .putAllMetadata(metadata) - .build()) + .putAllItems(configs) .build(); return responseEnvelope; }