diff --git a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java index 843992619..099904095 100644 --- a/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java +++ b/sdk/src/main/java/io/dapr/client/AbstractDaprClient.java @@ -115,7 +115,8 @@ abstract class AbstractDaprClient implements DaprClient, DaprPreviewClient { InvokeMethodRequest req = new InvokeMethodRequest(appId, methodName) .setBody(data) .setHttpExtension(httpExtension) - .setContentType(objectSerializer.getContentType()); + .setContentType(objectSerializer.getContentType()) + .setMetadata(metadata); return this.invokeMethod(req, type); } diff --git a/sdk/src/main/java/io/dapr/client/DaprClientHttp.java b/sdk/src/main/java/io/dapr/client/DaprClientHttp.java index f325c0e03..f5fb5c088 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientHttp.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientHttp.java @@ -185,6 +185,8 @@ public class DaprClientHttp extends AbstractDaprClient { final Object request = invokeMethodRequest.getBody(); final HttpExtension httpExtension = invokeMethodRequest.getHttpExtension(); final String contentType = invokeMethodRequest.getContentType(); + final Map metadata = invokeMethodRequest.getMetadata(); + if (httpExtension == null) { throw new IllegalArgumentException("HttpExtension cannot be null. Use HttpExtension.NONE instead."); } @@ -203,12 +205,15 @@ public class DaprClientHttp extends AbstractDaprClient { List pathSegments = new ArrayList<>(Arrays.asList(DaprHttp.API_VERSION, "invoke", appId, "method")); pathSegments.addAll(Arrays.asList(methodSegments)); - byte[] serializedRequestBody = objectSerializer.serialize(request); final Map headers = new HashMap<>(); if (contentType != null && !contentType.isEmpty()) { headers.put("content-type", contentType); } headers.putAll(httpExtension.getHeaders()); + if (metadata != null) { + headers.putAll(metadata); + } + byte[] serializedRequestBody = objectSerializer.serialize(request); Mono response = Mono.subscriberContext().flatMap( context -> this.client.invokeApi(httpMethod, pathSegments.toArray(new String[0]), httpExtension.getQueryParams(), serializedRequestBody, headers, context) diff --git a/sdk/src/main/java/io/dapr/client/domain/InvokeMethodRequest.java b/sdk/src/main/java/io/dapr/client/domain/InvokeMethodRequest.java index 6058363bb..74ed23504 100644 --- a/sdk/src/main/java/io/dapr/client/domain/InvokeMethodRequest.java +++ b/sdk/src/main/java/io/dapr/client/domain/InvokeMethodRequest.java @@ -13,6 +13,9 @@ limitations under the License. package io.dapr.client.domain; +import java.util.Collections; +import java.util.Map; + /** * A request to invoke a service. */ @@ -28,6 +31,8 @@ public class InvokeMethodRequest { private String contentType; + private Map metadata; + /** * Constructor for InvokeMethodRequest. * @@ -73,4 +78,13 @@ public class InvokeMethodRequest { this.contentType = contentType; return this; } + + public Map getMetadata() { + return metadata; + } + + public InvokeMethodRequest setMetadata(Map metadata) { + this.metadata = metadata == null ? null : Collections.unmodifiableMap(metadata); + return this; + } }