diff --git a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java index f1de13b9f0..685a7483ec 100644 --- a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java +++ b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java @@ -422,7 +422,13 @@ public class RestAnnotationProcessor { tokenValues.putAll(addPathAndGetTokens(declaring, method, args, uriBuilder)); - Multimap formParams = addFormParams(tokenValues, method, args); + Multimap formParams; + if (caller != null) { + formParams = addFormParams(tokenValues, caller.getMethod(), caller.getArgs()); + formParams.putAll(addFormParams(tokenValues, method, args)); + } else { + formParams = addFormParams(tokenValues, method, args); + } Multimap queryParams = addQueryParams(tokenValues, method, args); Multimap headers = buildHeaders(tokenValues, method, args); diff --git a/core/src/test/java/org/jclouds/rest/annotationparsing/DelegateAnnotationExpectTest.java b/core/src/test/java/org/jclouds/rest/annotationparsing/DelegateAnnotationExpectTest.java index 888eeb23cd..aacdd03022 100644 --- a/core/src/test/java/org/jclouds/rest/annotationparsing/DelegateAnnotationExpectTest.java +++ b/core/src/test/java/org/jclouds/rest/annotationparsing/DelegateAnnotationExpectTest.java @@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue; import java.util.concurrent.TimeUnit; +import javax.ws.rs.FormParam; import javax.ws.rs.HEAD; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -56,6 +57,8 @@ public class DelegateAnnotationExpectTest extends BaseRestClientExpectTest form(); + @POST @Payload("{project}") ListenableFuture syncAll(); @@ -87,6 +97,14 @@ public class DelegateAnnotationExpectTest extends BaseRestClientExpectTest exists(@PathParam("disk") String diskName); } + public void testDelegatingCallTakesIntoConsiderationAndCalleeFormParam() { + + DelegatingApi client = requestSendsResponse(HttpRequest.builder().method("POST").endpoint("http://mock") + .addFormParam("project", "prod").build(), HttpResponse.builder().statusCode(200).build()); + + client.getDiskApiForProjectForm("prod").form(); + } + public void testDelegatingCallTakesIntoConsiderationAndCalleePayloadParam() { DelegatingApi client = requestSendsResponse(