mirror of https://github.com/apache/jclouds.git
Merge pull request #1078 from rackspace/jclouds-1077-queryparam-iterable
Added support for Iterable collections to QueryParam.
This commit is contained in:
commit
27dbd46409
|
@ -137,7 +137,7 @@ public class NodeApiExpectTest extends BaseCloudLoadBalancerApiExpectTest<CloudL
|
|||
}
|
||||
|
||||
public void testRemoveNodesFromLoadBalancer() {
|
||||
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes?id=%5B410%2C%20411%5D");
|
||||
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes?id=410&id=411");
|
||||
NodeApi api = requestsSendResponses(
|
||||
rackspaceAuthWithUsernameAndApiKey,
|
||||
responseWithAccess,
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
package org.jclouds.rest.internal;
|
||||
|
||||
import static com.google.common.base.Functions.toStringFunction;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.collect.Collections2.filter;
|
||||
|
@ -1317,8 +1318,15 @@ public class RestAnnotationProcessor<T> {
|
|||
Set<Annotation> extractors = indexToParamExtractor.getUnchecked(entry.getKey());
|
||||
String paramKey = ((QueryParam) key).value();
|
||||
Optional<?> paramValue = getParamValue(method, args, extractors, entry, paramKey);
|
||||
if (paramValue.isPresent())
|
||||
queryParamValues.put(paramKey, paramValue.get().toString());
|
||||
if (paramValue.isPresent()) {
|
||||
if (paramValue.get() instanceof Iterable) {
|
||||
Iterable<String> iterableStrings = transform(Iterable.class.cast(paramValue.get()), toStringFunction());
|
||||
queryParamValues.putAll(paramKey, iterableStrings);
|
||||
}
|
||||
else {
|
||||
queryParamValues.put(paramKey, paramValue.get().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ import java.net.URI;
|
|||
import java.net.URLEncoder;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.NoSuchElementException;
|
||||
|
@ -151,6 +152,7 @@ import com.google.common.collect.ImmutableList;
|
|||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSortedSet;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
|
@ -507,6 +509,11 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
|
|||
@QueryParams(keys = { "foo", "fooble" }, values = { "bar", "baz" })
|
||||
public void foo3Nullable(@Nullable @QueryParam("robbie") String robbie) {
|
||||
}
|
||||
|
||||
@FOO
|
||||
@Path("/")
|
||||
public void queryParamIterable(@Nullable @QueryParam("foo") Iterable<String> bars) {
|
||||
}
|
||||
}
|
||||
|
||||
public void testUnEncodeQuery() {
|
||||
|
@ -564,6 +571,55 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
|
|||
assertEquals(request.getEndpoint().getQuery(), "foo=bar&fooble=baz");
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public void testQueryParamIterableOneString() throws SecurityException, NoSuchMethodException {
|
||||
Method method = TestQuery.class.getMethod("queryParamIterable", Iterable.class);
|
||||
Set<String> bars = ImmutableSortedSet.<String> of("1");
|
||||
HttpRequest request = factory(TestPath.class).createRequest(method, new Object[] { bars });
|
||||
assertEquals(request.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(request.getEndpoint().getPath(), "/");
|
||||
assertEquals(request.getEndpoint().getQuery(), "foo=1");
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public void testQueryParamIterableString() throws SecurityException, NoSuchMethodException {
|
||||
Method method = TestQuery.class.getMethod("queryParamIterable", Iterable.class);
|
||||
Set<String> bars = ImmutableSortedSet.<String> of("1", "2", "3");
|
||||
HttpRequest request = factory(TestPath.class).createRequest(method, new Object[] { bars });
|
||||
assertEquals(request.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(request.getEndpoint().getPath(), "/");
|
||||
assertEquals(request.getEndpoint().getQuery(), "foo=1&foo=2&foo=3");
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public void testQueryParamIterableInteger() throws SecurityException, NoSuchMethodException {
|
||||
Method method = TestQuery.class.getMethod("queryParamIterable", Iterable.class);
|
||||
Set<Integer> bars = ImmutableSortedSet.<Integer> of(1, 2, 3);
|
||||
HttpRequest request = factory(TestPath.class).createRequest(method, new Object[] { bars });
|
||||
assertEquals(request.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(request.getEndpoint().getPath(), "/");
|
||||
assertEquals(request.getEndpoint().getQuery(), "foo=1&foo=2&foo=3");
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public void testQueryParamIterableEmpty() throws SecurityException, NoSuchMethodException {
|
||||
Method method = TestQuery.class.getMethod("queryParamIterable", Iterable.class);
|
||||
Set<String> bars = Collections.emptySet();
|
||||
HttpRequest request = factory(TestPath.class).createRequest(method, new Object[] { bars });
|
||||
assertEquals(request.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(request.getEndpoint().getPath(), "/");
|
||||
assertEquals(request.getEndpoint().getQuery(), null);
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public void testQueryParamIterableNull() throws SecurityException, NoSuchMethodException {
|
||||
Method method = TestQuery.class.getMethod("queryParamIterable", Iterable.class);
|
||||
HttpRequest request = factory(TestPath.class).createRequest(method, (Iterable<String>) null);
|
||||
assertEquals(request.getEndpoint().getHost(), "localhost");
|
||||
assertEquals(request.getEndpoint().getPath(), "/");
|
||||
assertEquals(request.getEndpoint().getQuery(), null);
|
||||
assertEquals(request.getMethod(), "FOO");
|
||||
}
|
||||
|
||||
public interface TestPayloadParamVarargs {
|
||||
@POST
|
||||
|
|
Loading…
Reference in New Issue