mirror of https://github.com/apache/jclouds.git
Issue 609:support same arity operations on rest services
This commit is contained in:
parent
3e80c0433c
commit
a9277558cd
|
@ -178,7 +178,7 @@ public class RestAnnotationProcessor<T> {
|
|||
static Map<Method, Map<Integer, Set<Annotation>>> createMethodToIndexOfParamToAnnotation(
|
||||
final Class<? extends Annotation> annotation) {
|
||||
return new MapMaker().makeComputingMap(new Function<Method, Map<Integer, Set<Annotation>>>() {
|
||||
public Map<Integer, Set<Annotation>> apply(final Method method) {
|
||||
public Map<Integer, Set<Annotation>> apply(Method method) {
|
||||
return new MapMaker().makeComputingMap(new GetAnnotationsForMethodParameterIndex(method, annotation));
|
||||
}
|
||||
});
|
||||
|
@ -218,7 +218,7 @@ public class RestAnnotationProcessor<T> {
|
|||
|
||||
static final Map<Method, Set<Integer>> methodToIndexesOfOptions = new MapMaker()
|
||||
.makeComputingMap(new Function<Method, Set<Integer>>() {
|
||||
public Set<Integer> apply(final Method method) {
|
||||
public Set<Integer> apply(Method method) {
|
||||
Builder<Integer> toReturn = ImmutableSet.<Integer> builder();
|
||||
for (int index = 0; index < method.getParameterTypes().length; index++) {
|
||||
Class<?> type = method.getParameterTypes()[index];
|
||||
|
@ -307,7 +307,7 @@ public class RestAnnotationProcessor<T> {
|
|||
int result = 1;
|
||||
result = prime * result + ((declaringPackage == null) ? 0 : declaringPackage.hashCode());
|
||||
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||
result = prime * result + parameterCount;
|
||||
result = prime * result + parametersTypeHashCode;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -330,19 +330,22 @@ public class RestAnnotationProcessor<T> {
|
|||
return false;
|
||||
} else if (!name.equals(other.name))
|
||||
return false;
|
||||
if (parameterCount != other.parameterCount)
|
||||
if (parametersTypeHashCode != other.parametersTypeHashCode)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private final String name;
|
||||
private final int parameterCount;
|
||||
private final int parametersTypeHashCode;
|
||||
private final Package declaringPackage;
|
||||
|
||||
public MethodKey(Method method) {
|
||||
this.name = method.getName();
|
||||
this.declaringPackage = method.getDeclaringClass().getPackage();
|
||||
this.parameterCount = method.getParameterTypes().length;
|
||||
int parametersTypeHashCode = 0;
|
||||
for (Class<?> param: method.getParameterTypes())
|
||||
parametersTypeHashCode +=param.hashCode();
|
||||
this.parametersTypeHashCode = parametersTypeHashCode;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -307,8 +307,8 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
}
|
||||
|
||||
Caller caller = child.getInstance(Caller.class);
|
||||
expect(mock.submit(requestLineEquals("GET http://howdyboys/client/1/foo HTTP/1.1"), eq(function)))
|
||||
.andReturn(Futures.<Void> immediateFuture(null)).atLeastOnce();
|
||||
expect(mock.submit(requestLineEquals("GET http://howdyboys/client/1/foo HTTP/1.1"), eq(function))).andReturn(
|
||||
Futures.<Void> immediateFuture(null)).atLeastOnce();
|
||||
replay(mock);
|
||||
|
||||
caller.getCallee(URI.create("http://howdyboys")).onePath("foo");
|
||||
|
@ -834,13 +834,13 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
@Unwrap(depth = 2)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
ListenableFuture<Long> testUnwrapDepth2Long();
|
||||
|
||||
|
||||
@GET
|
||||
@Path("/")
|
||||
@Unwrap(depth = 2, edgeCollection = Set.class)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
ListenableFuture<String> testUnwrapDepth2Set();
|
||||
|
||||
|
||||
@GET
|
||||
@Path("/")
|
||||
@Unwrap(depth = 3, edgeCollection = Set.class)
|
||||
|
@ -854,8 +854,12 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
}
|
||||
|
||||
@ROWDY
|
||||
@Path("/objects/{id}")
|
||||
@Path("/strings/{id}")
|
||||
ListenableFuture<Boolean> rowdy(@PathParam("id") String path);
|
||||
|
||||
@ROWDY
|
||||
@Path("/ints/{id}")
|
||||
ListenableFuture<Boolean> rowdy(@PathParam("id") int path);
|
||||
}
|
||||
|
||||
static class Wrapper {
|
||||
|
@ -866,7 +870,16 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
Method method = TestPut.class.getMethod("rowdy", String.class);
|
||||
HttpRequest request = factory(TestPut.class).createRequest(method, "data");
|
||||
|
||||
assertRequestLineEquals(request, "ROWDY http://localhost:9999/objects/data HTTP/1.1");
|
||||
assertRequestLineEquals(request, "ROWDY http://localhost:9999/strings/data HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
}
|
||||
|
||||
public void testAlternateHttpMethodSameArity() throws SecurityException, NoSuchMethodException, IOException {
|
||||
Method method = TestPut.class.getMethod("rowdy", int.class);
|
||||
HttpRequest request = factory(TestPut.class).createRequest(method, "data");
|
||||
|
||||
assertRequestLineEquals(request, "ROWDY http://localhost:9999/ints/data HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
}
|
||||
|
@ -1051,8 +1064,7 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
Function<HttpResponse, Map<String, String>> parser = (Function<HttpResponse, Map<String, String>>) RestAnnotationProcessor
|
||||
.createResponseParser(parserFactory, injector, method, request);
|
||||
|
||||
assertEquals(parser.apply(new HttpResponse(200, "ok",
|
||||
newStringPayload("{\"runit\":[\"0.7.0\"]}"))), "0.7.0");
|
||||
assertEquals(parser.apply(new HttpResponse(200, "ok", newStringPayload("{\"runit\":[\"0.7.0\"]}"))), "0.7.0");
|
||||
|
||||
assertEquals(parser.apply(new HttpResponse(200, "ok", newStringPayload("{\"runit\":[]}"))), null);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue