mirror of https://github.com/apache/jclouds.git
Merge pull request #1334 from jclouds/delegate-with-payloadparam
@Delegate considers @PayloadParam
This commit is contained in:
commit
5f8c2c269c
|
@ -293,7 +293,13 @@ public class RestAnnotationProcessor implements Function<Invocation, HttpRequest
|
|||
|
||||
org.jclouds.rest.MapBinder mapBinder = getMapPayloadBinderOrNull(invocation);
|
||||
if (mapBinder != null) {
|
||||
Map<String, Object> mapParams = buildPayloadParams(invocation);
|
||||
Map<String, Object> mapParams;
|
||||
if (caller != null) {
|
||||
mapParams = buildPayloadParams(caller);
|
||||
mapParams.putAll(buildPayloadParams(invocation));
|
||||
} else {
|
||||
mapParams = buildPayloadParams(invocation);
|
||||
}
|
||||
if (invocation.getInvokable().isAnnotationPresent(PayloadParams.class)) {
|
||||
PayloadParams params = invocation.getInvokable().getAnnotation(PayloadParams.class);
|
||||
addMapPayload(mapParams, params, headers);
|
||||
|
|
|
@ -22,6 +22,7 @@ import static org.jclouds.providers.AnonymousProviderMetadata.forClientMappedToA
|
|||
import static org.testng.Assert.assertTrue;
|
||||
|
||||
import javax.ws.rs.HEAD;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
|
||||
|
@ -32,6 +33,8 @@ import org.jclouds.providers.ProviderMetadata;
|
|||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.annotations.Delegate;
|
||||
import org.jclouds.rest.annotations.Fallback;
|
||||
import org.jclouds.rest.annotations.Payload;
|
||||
import org.jclouds.rest.annotations.PayloadParam;
|
||||
import org.jclouds.rest.config.RestClientModule;
|
||||
import org.jclouds.rest.internal.BaseRestClientExpectTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -52,22 +55,26 @@ public class DelegateAnnotationExpectTest extends BaseRestClientExpectTest<Deleg
|
|||
|
||||
@Delegate
|
||||
@Path("/projects/{project}")
|
||||
DiskApi getDiskApiForProject(@PathParam("project") String projectName);
|
||||
DiskApi getDiskApiForProject(@PayloadParam("project") @PathParam("project") String projectName);
|
||||
}
|
||||
|
||||
static interface DelegatingAsyncApi {
|
||||
|
||||
@Delegate
|
||||
@Path("/projects/{project}")
|
||||
DiskAsyncApi getDiskApiForProject(@PathParam("project") String projectName);
|
||||
DiskAsyncApi getDiskApiForProject(@PayloadParam("project") @PathParam("project") String projectName);
|
||||
}
|
||||
|
||||
static interface DiskApi {
|
||||
void syncAll();
|
||||
|
||||
boolean exists(@PathParam("disk") String diskName);
|
||||
}
|
||||
|
||||
static interface DiskAsyncApi {
|
||||
@POST
|
||||
@Payload("<Sync>{project}</Sync>")
|
||||
ListenableFuture<Void> syncAll();
|
||||
|
||||
@HEAD
|
||||
@Path("/disks/{disk}")
|
||||
|
@ -75,6 +82,17 @@ public class DelegateAnnotationExpectTest extends BaseRestClientExpectTest<Deleg
|
|||
public ListenableFuture<Boolean> exists(@PathParam("disk") String diskName);
|
||||
}
|
||||
|
||||
public void testDelegatingCallTakesIntoConsiderationAndCalleePayloadParam() {
|
||||
|
||||
DelegatingApi client = requestSendsResponse(
|
||||
HttpRequest.builder().method("POST")
|
||||
.endpoint("http://mock/projects/prod")
|
||||
.payload("<Sync>prod</Sync>").build(),
|
||||
HttpResponse.builder().statusCode(200).build());
|
||||
|
||||
client.getDiskApiForProject("prod").syncAll();
|
||||
}
|
||||
|
||||
public void testDelegatingCallTakesIntoConsiderationCallerAndCalleePath() {
|
||||
|
||||
DelegatingApi client = requestSendsResponse(
|
||||
|
@ -82,7 +100,6 @@ public class DelegateAnnotationExpectTest extends BaseRestClientExpectTest<Deleg
|
|||
HttpResponse.builder().statusCode(200).build());
|
||||
|
||||
assertTrue(client.getDiskApiForProject("prod").exists("disk1"));
|
||||
|
||||
}
|
||||
|
||||
// crufty junk until we inspect delegating api classes for all their client
|
||||
|
|
Loading…
Reference in New Issue