You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2013/07/23 18:19:22 UTC
svn commit: r1506144 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/
rt/rs/client/src/main/java/org/...
Author: sergeyb
Date: Tue Jul 23 16:19:22 2013
New Revision: 1506144
URL: http://svn.apache.org/r1506144
Log:
[CXF-5146] More work to do with having Typevariables recognized by Jackson
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ParameterizedCollectionType.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Tue Jul 23 16:19:22 2013
@@ -1265,16 +1265,25 @@ public final class InjectionUtils {
// to invoked.getReturnType(); same applies to the case when a method returns Response
type = targetObject.getClass();
} else {
- type = invoked.getGenericReturnType();
- if (type instanceof TypeVariable) {
- type = InjectionUtils.getSuperType(invoked.getDeclaringClass(),
- (TypeVariable<?>)type);
- }
+ type = processGenericTypeIfNeeded(invoked.getDeclaringClass(), invoked.getGenericReturnType());
+
}
return type;
}
+ public static Type processGenericTypeIfNeeded(Class<?> cls, Type type) {
+ if (type instanceof TypeVariable) {
+ return InjectionUtils.getSuperType(cls, (TypeVariable<?>)type);
+ } else if (type instanceof ParameterizedType
+ && ((ParameterizedType)type).getActualTypeArguments()[0] instanceof TypeVariable
+ && isSupportedCollectionOrArray(getRawType(type))) {
+ return new ParameterizedCollectionType(InjectionUtils.getActualType(type, 0));
+ } else {
+ return type;
+ }
+ }
+
public static Object getEntity(Object o) {
return o instanceof GenericEntity ? ((GenericEntity<?>)o).getEntity() : o;
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Tue Jul 23 16:19:22 2013
@@ -27,7 +27,6 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -774,21 +773,20 @@ public final class JAXRSUtils {
Method method = ori.getMethodToInvoke();
- Class<?>[] parameterTypes = method.getParameterTypes();
- Parameter[] paramsInfo = ori.getParameters().toArray(new Parameter[ori.getParameters().size()]);
Method annotatedMethod = ori.getAnnotatedMethod();
- Type[] genericParameterTypes = annotatedMethod == null ? method.getGenericParameterTypes()
- : annotatedMethod.getGenericParameterTypes();
- Annotation[][] anns = annotatedMethod == null ? null : annotatedMethod.getParameterAnnotations();
+ Method actualMethod = annotatedMethod == null ? method : annotatedMethod;
+
+ Class<?>[] parameterTypes = actualMethod.getParameterTypes();
+ Parameter[] paramsInfo = ori.getParameters().toArray(new Parameter[ori.getParameters().size()]);
+
+ Type[] genericParameterTypes = actualMethod.getGenericParameterTypes();
+ Annotation[][] anns = actualMethod.getParameterAnnotations();
List<Object> params = new ArrayList<Object>(parameterTypes.length);
for (int i = 0; i < parameterTypes.length; i++) {
Class<?> param = parameterTypes[i];
- Type genericParam = genericParameterTypes[i];
- if (genericParam instanceof TypeVariable) {
- genericParam = InjectionUtils.getSuperType(ori.getClassResourceInfo().getServiceClass(),
- (TypeVariable<?>)genericParam);
- }
+ Type genericParam = InjectionUtils.processGenericTypeIfNeeded(
+ ori.getClassResourceInfo().getServiceClass(), genericParameterTypes[i]);
if (param == Object.class) {
param = (Class<?>)genericParam;
} else if (genericParam == Object.class) {
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ParameterizedCollectionType.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ParameterizedCollectionType.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ParameterizedCollectionType.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ParameterizedCollectionType.java Tue Jul 23 16:19:22 2013
@@ -23,11 +23,11 @@ import java.lang.reflect.ParameterizedTy
import java.lang.reflect.Type;
import java.util.Collection;
-public final class ParameterizedCollectionType<T> implements ParameterizedType {
- private final Class<T> collectionMemberClass;
+public final class ParameterizedCollectionType implements ParameterizedType {
+ private final Class<?> collectionMemberClass;
private final Type[] typeArgs;
- public ParameterizedCollectionType(Class<T> collectionMemberClass) {
+ public ParameterizedCollectionType(Class<?> collectionMemberClass) {
this.collectionMemberClass = collectionMemberClass;
this.typeArgs = new Type[] {collectionMemberClass};
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java Tue Jul 23 16:19:22 2013
@@ -407,7 +407,7 @@ public class JAXBElementProviderTest ext
TagVO2 tag = new TagVO2("a", "b");
List<TagVO2> tags = Collections.singletonList(tag);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
- provider.writeTo(tags, List.class, new ParameterizedCollectionType<TagVO2>(TagVO2.class),
+ provider.writeTo(tags, List.class, new ParameterizedCollectionType(TagVO2.class),
new Annotation[0], MediaType.TEXT_XML_TYPE, new MetadataMap<String, Object>(), bos);
assertTrue(bos.toString().contains("prefix:thetag"));
assertFalse(bos.toString().contains("ns1:thetag"));
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Tue Jul 23 16:19:22 2013
@@ -143,7 +143,8 @@ public class JAXRSUtilsTest extends Asse
headers.putSingle("Content-Type", ct);
messageImpl.put(Message.PROTOCOL_HEADERS, headers);
messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals("2 form params should've been identified", 2, params.size());
assertEquals("First Form Parameter not matched correctly",
@@ -820,7 +821,8 @@ public class JAXRSUtilsTest extends Asse
MessageImpl messageImpl = new MessageImpl();
messageImpl.put(Message.QUERY_STRING, "query=24&query2");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(4, params.size());
@@ -837,7 +839,8 @@ public class JAXRSUtilsTest extends Asse
MessageImpl messageImpl = new MessageImpl();
messageImpl.put(Message.QUERY_STRING, "query=1&query=2");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -853,7 +856,8 @@ public class JAXRSUtilsTest extends Asse
MessageImpl messageImpl = new MessageImpl();
messageImpl.put(Message.QUERY_STRING, "query=1&query=2");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -871,7 +875,8 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING,
"query2=query2Value&query2=query2Value2&query3=1&query3=2&query4");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(6, params.size());
@@ -916,7 +921,8 @@ public class JAXRSUtilsTest extends Asse
MultivaluedMap<String, String> headers = new MetadataMap<String, String>();
headers.add("Cookie", "c1=c1Value");
messageImpl.put(Message.PROTOCOL_HEADERS, headers);
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(params.size(), 4);
@@ -940,7 +946,8 @@ public class JAXRSUtilsTest extends Asse
headers.add("Cookie", "c1=c1Value; c2=c2Value");
headers.add("Cookie", "c3=c3Value");
messageImpl.put(Message.PROTOCOL_HEADERS, headers);
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(params.size(), 3);
@@ -956,7 +963,8 @@ public class JAXRSUtilsTest extends Asse
UUID u = UUID.randomUUID();
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "p1=" + u.toString() + "&p2=1&p3=2");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(3, params.size());
@@ -972,7 +980,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testFromValueParam", argType);
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "p1=Europe%2FLondon");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -989,7 +998,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testCustomerParam", argType);
messageImpl.put(Message.QUERY_STRING, "p1=Fred&p2=Barry&p3=Jack&p4=John");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(3, params.size());
@@ -1019,7 +1029,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testLocaleParam", argType);
messageImpl.put(Message.QUERY_STRING, "p1=en_us");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -1037,7 +1048,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testGenericObjectParam", argType);
messageImpl.put(Message.QUERY_STRING, "p1=thequery");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -1055,7 +1067,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testCustomerParam", argType);
messageImpl.put(Message.QUERY_STRING, "p3=jack");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(3, params.size());
@@ -1071,7 +1084,8 @@ public class JAXRSUtilsTest extends Asse
Method m = Customer.class.getMethod("testCustomerParam2", argType);
messageImpl.put(Message.QUERY_STRING, "p1=Fred&p1=Barry");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals(1, params.size());
@@ -1087,9 +1101,10 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "p1=1");
try {
- JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
- null,
- messageImpl);
+ JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
+ null,
+ messageImpl);
fail("HashMap can not be handled as parameter");
} catch (WebApplicationException ex) {
assertEquals(500, ex.getResponse().getStatus());
@@ -1107,9 +1122,10 @@ public class JAXRSUtilsTest extends Asse
MessageImpl messageImpl = new MessageImpl();
messageImpl.put(Message.QUERY_STRING, "p1=3");
try {
- JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
- null,
- messageImpl);
+ JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
+ null,
+ messageImpl);
fail("CustomerGender have no instance with name 3");
} catch (WebApplicationException ex) {
assertEquals(404, ex.getResponse().getStatus());
@@ -1144,7 +1160,8 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "a=aValue");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals(1, params.size());
@@ -1159,7 +1176,8 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "a=aValue");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals(1, params.size());
@@ -1174,7 +1192,8 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
messageImpl.put(Message.QUERY_STRING, "a=aValue");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals(1, params.size());
@@ -1269,7 +1288,8 @@ public class JAXRSUtilsTest extends Asse
String body = "a=aValue&b=123&cb=true";
messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals("Bean should be created", 1, params.size());
@@ -1319,7 +1339,8 @@ public class JAXRSUtilsTest extends Asse
messageImpl.put(Message.PROTOCOL_HEADERS, headers);
String body = "g.b=1&g.b=2";
messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null,
messageImpl);
assertEquals("Bean should be created", 1, params.size());
@@ -1338,7 +1359,8 @@ public class JAXRSUtilsTest extends Asse
MessageImpl simpleMessageImpl,
MultivaluedMap<String, String> complexValues,
MessageImpl complexMessageImpl) throws Exception {
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
simpleValues,
simpleMessageImpl);
assertEquals("Bean should be created", 1, params.size());
@@ -1348,9 +1370,10 @@ public class JAXRSUtilsTest extends Asse
assertEquals("aValue", cb.getA());
assertEquals(new Long(123), cb.getB());
- params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
- complexValues,
- complexMessageImpl);
+ params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
+ complexValues,
+ complexMessageImpl);
assertEquals("Bean should be created", 1, params.size());
Customer.CustomerBean cb1 = (Customer.CustomerBean)params.get(0);
assertNotNull(cb1);
@@ -1429,7 +1452,8 @@ public class JAXRSUtilsTest extends Asse
messageImpl.put(Message.QUERY_STRING,
"query=first&query2=second&query3=3&query4=true&query5");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals("First Query Parameter of multiple was not matched correctly", "first",
params.get(0));
@@ -1452,7 +1476,8 @@ public class JAXRSUtilsTest extends Asse
MessageImpl messageImpl = new MessageImpl();
messageImpl.put(Message.REQUEST_URI, "/foo;p4=0;p3=3/bar;p1=1;p2/baz;p4=4;p4=5;p5");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals("5 Matrix params should've been identified", 6, params.size());
@@ -1481,7 +1506,8 @@ public class JAXRSUtilsTest extends Asse
messageImpl.put(Message.REQUEST_URI, "/bar%20foo;p4=0%201");
MultivaluedMap<String, String> values = new MetadataMap<String, String>();
values.add("ps", "bar%20foo;p4=0%201");
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
values,
messageImpl);
assertEquals("2 params should've been identified", 2, params.size());
@@ -1516,7 +1542,8 @@ public class JAXRSUtilsTest extends Asse
}
messageImpl.put(Message.PROTOCOL_HEADERS, headers);
messageImpl.setContent(InputStream.class, new ByteArrayInputStream(body.getBytes()));
- List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
+ List<Object> params = JAXRSUtils.processParameters(new OperationResourceInfo(m,
+ new ClassResourceInfo(Customer.class)),
null, messageImpl);
assertEquals("2 form params should've been identified", 2, params.size());
Modified: cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java (original)
+++ cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java Tue Jul 23 16:19:22 2013
@@ -24,7 +24,6 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
@@ -592,11 +591,9 @@ public class ClientProxyImpl extends Abs
&& ((InputStream)r.getEntity()).available() == 0)) {
return r;
}
- Type genericType = method.getGenericReturnType();
- if (genericType instanceof TypeVariable) {
- genericType = InjectionUtils.getSuperType(method.getDeclaringClass(),
- (TypeVariable<?>)genericType);
- }
+ Type genericType =
+ InjectionUtils.processGenericTypeIfNeeded(method.getDeclaringClass(),
+ method.getGenericReturnType());
return readBody(r,
outMessage,
method.getReturnType(),
@@ -654,6 +651,9 @@ public class ClientProxyImpl extends Abs
if (bodyType != null) {
paramType = bodyType;
}
+ paramType = InjectionUtils.processGenericTypeIfNeeded(method.getDeclaringClass(),
+ paramType);
+
writeBody(body, outMessage, bodyClass, paramType,
anns, os);
} else {
Modified: cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java (original)
+++ cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java Tue Jul 23 16:19:22 2013
@@ -483,7 +483,7 @@ public class WebClient extends AbstractC
public <T> Collection<? extends T> invokeAndGetCollection(String httpMethod, Object body,
Class<T> memberClass) {
Response r = doInvoke(httpMethod, body, null,
- Collection.class, new ParameterizedCollectionType<T>(memberClass));
+ Collection.class, new ParameterizedCollectionType(memberClass));
return CastUtils.cast((Collection<?>)r.getEntity(), memberClass);
}
@@ -494,7 +494,7 @@ public class WebClient extends AbstractC
* @return JAX-RS Response
*/
public <T> Response postCollection(Object collection, Class<T> memberClass) {
- return doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType<T>(memberClass),
+ return doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType(memberClass),
Response.class, Response.class);
}
@@ -507,7 +507,7 @@ public class WebClient extends AbstractC
*/
public <T1, T2> T2 postCollection(Object collection, Class<T1> memberClass,
Class<T2> responseClass) {
- Response r = doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType<T1>(memberClass),
+ Response r = doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType(memberClass),
responseClass, responseClass);
return responseClass.cast(responseClass == Response.class ? r : r.getEntity());
}
@@ -522,8 +522,8 @@ public class WebClient extends AbstractC
public <T1, T2> Collection<? extends T2> postAndGetCollection(Object collection,
Class<T1> memberClass,
Class<T2> responseClass) {
- Response r = doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType<T1>(memberClass),
- Collection.class, new ParameterizedCollectionType<T2>(responseClass));
+ Response r = doInvoke(HttpMethod.POST, collection, new ParameterizedCollectionType(memberClass),
+ Collection.class, new ParameterizedCollectionType(responseClass));
return CastUtils.cast((Collection<?>)r.getEntity(), responseClass);
}
@@ -537,7 +537,7 @@ public class WebClient extends AbstractC
public <T> Collection<? extends T> postObjectGetCollection(Object body,
Class<T> responseClass) {
Response r = doInvoke(HttpMethod.POST, body, null, Collection.class,
- new ParameterizedCollectionType<T>(responseClass));
+ new ParameterizedCollectionType(responseClass));
return CastUtils.cast((Collection<?>)r.getEntity(), responseClass);
}
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreSpring.java Tue Jul 23 16:19:22 2013
@@ -21,7 +21,9 @@ package org.apache.cxf.systest.jaxrs;
import java.io.ByteArrayOutputStream;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
@@ -111,6 +113,16 @@ public class BookStoreSpring {
}
@SuppressWarnings("unchecked")
+ @GET
+ @Path("/books/superbooks")
+ @Produces("application/json")
+ public <T extends Book> List<T> getSuperBookCollectionJson() {
+ SuperBook book = new SuperBook("SuperBook", 999L);
+
+ return Collections.singletonList((T)book);
+ }
+
+ @SuppressWarnings("unchecked")
@POST
@Path("/books/superbook")
@Consumes("application/json")
@@ -119,6 +131,18 @@ public class BookStoreSpring {
return (T)(SuperBook)book;
}
+ @SuppressWarnings("unchecked")
+ @POST
+ @Path("/books/superbooks")
+ @Consumes("application/json")
+ @Produces("application/json")
+ public <T extends Book> List<T> echoSuperBookCollectionJson(List<T> book) {
+ if (book.get(0) instanceof SuperBook) {
+ return book;
+ }
+ throw new WebApplicationException(400);
+ }
+
@POST
@Path("/books/xsitype")
@Produces("application/xml")
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java?rev=1506144&r1=1506143&r2=1506144&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java Tue Jul 23 16:19:22 2013
@@ -24,6 +24,7 @@ import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
@@ -75,6 +76,29 @@ public class JAXRSClientServerResourceJa
}
@Test
+ public void testGetSuperBookCollectionProxy() throws Exception {
+
+ String endpointAddress =
+ "http://localhost:" + PORT + "/webapp/store2";
+ BookStoreSpring proxy = JAXRSClientFactory.create(endpointAddress, BookStoreSpring.class,
+ Collections.singletonList(new JacksonJsonProvider()));
+ List<SuperBook> books = proxy.getSuperBookCollectionJson();
+ assertEquals(999L, books.get(0).getId());
+ }
+
+ @Test
+ public void testEchoSuperBookCollectionProxy() throws Exception {
+
+ String endpointAddress =
+ "http://localhost:" + PORT + "/webapp/store2";
+ BookStoreSpring proxy = JAXRSClientFactory.create(endpointAddress, BookStoreSpring.class,
+ Collections.singletonList(new JacksonJsonProvider()));
+ List<SuperBook> books =
+ proxy.echoSuperBookCollectionJson(Collections.singletonList(new SuperBook("Super", 124L)));
+ assertEquals(124L, books.get(0).getId());
+ }
+
+ @Test
public void testEchoSuperBookProxy() throws Exception {
String endpointAddress =
@@ -98,6 +122,20 @@ public class JAXRSClientServerResourceJa
Book book = collection.iterator().next();
assertEquals(123L, book.getId());
}
+
+ @Test
+ public void testGetCollectionOfSuperBooks() throws Exception {
+
+ String endpointAddress =
+ "http://localhost:" + PORT + "/webapp/store2/books/superbooks";
+ WebClient wc = WebClient.create(endpointAddress,
+ Collections.singletonList(new JacksonJsonProvider()));
+ wc.accept("application/json");
+ Collection<? extends Book> collection = wc.getCollection(Book.class);
+ assertEquals(1, collection.size());
+ Book book = collection.iterator().next();
+ assertEquals(999L, book.getId());
+ }
private String getStringFromInputStream(InputStream in) throws Exception {