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/22 15:59:19 UTC

svn commit: r1505686 - in /cxf/trunk: rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/

Author: sergeyb
Date: Mon Jul 22 13:59:19 2013
New Revision: 1505686

URL: http://svn.apache.org/r1505686
Log:
[CXF-5146] Updating RS proxy code to unwrap TypeVariables

Modified:
    cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book.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
    cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml

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=1505686&r1=1505685&r2=1505686&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 Mon Jul 22 13:59:19 2013
@@ -24,6 +24,7 @@ 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;
@@ -591,9 +592,16 @@ public class ClientProxyImpl extends Abs
                     && ((InputStream)r.getEntity()).available() == 0)) {
                 return r;
             }
-            
-            return readBody(r, outMessage, method.getReturnType(), 
-                            method.getGenericReturnType(), method.getDeclaredAnnotations());
+            Type genericType = method.getGenericReturnType();
+            if (genericType instanceof TypeVariable) {
+                genericType = InjectionUtils.getSuperType(method.getDeclaringClass(), 
+                                                   (TypeVariable<?>)genericType);
+            }
+            return readBody(r, 
+                            outMessage, 
+                            method.getReturnType(), 
+                            genericType, 
+                            method.getDeclaredAnnotations());
         } finally {
             ClientProviderFactory.getInstance(outMessage).clearThreadLocalProxies();
         }

Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book.java?rev=1505686&r1=1505685&r2=1505686&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book.java Mon Jul 22 13:59:19 2013
@@ -29,7 +29,11 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
 
+@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "class")
 @XmlRootElement(name = "Book")
 public class Book {
     private String name;

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=1505686&r1=1505685&r2=1505686&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 Mon Jul 22 13:59:19 2013
@@ -100,6 +100,25 @@ public class BookStoreSpring {
         return new SuperBook("SuperBook", 999L);
     }
     
+    @SuppressWarnings("unchecked")
+    @GET
+    @Path("/books/superbook")
+    @Produces("application/json")
+    public <T extends Book> T getSuperBookJson() {
+        SuperBook book = new SuperBook("SuperBook", 999L);
+        
+        return (T)book;
+    }
+    
+    @SuppressWarnings("unchecked")
+    @POST
+    @Path("/books/superbook")
+    @Consumes("application/json")
+    @Produces("application/json")
+    public <T extends Book> T echoSuperBookJson(T book) {
+        return (T)(SuperBook)book;
+    }
+    
     @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=1505686&r1=1505685&r2=1505686&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 Mon Jul 22 13:59:19 2013
@@ -28,6 +28,7 @@ import java.util.Collections;
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 
 import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
@@ -50,7 +51,7 @@ public class JAXRSClientServerResourceJa
     public void testGetBook123() throws Exception {
         
         String endpointAddress =
-            "http://localhost:" + PORT + "/webapp/bookstore/books/123"; 
+            "http://localhost:" + PORT + "/webapp/store1/bookstore/books/123"; 
         URL url = new URL(endpointAddress);
         URLConnection connect = url.openConnection();
         connect.addRequestProperty("Accept", "application/json");
@@ -58,15 +59,37 @@ public class JAXRSClientServerResourceJa
         assertNotNull(in);           
 
         assertEquals("Jackson output not correct", 
-                     "{\"name\":\"CXF in Action\",\"id\":123}",
+                     "{\"class\":\"org.apache.cxf.systest.jaxrs.Book\",\"name\":\"CXF in Action\",\"id\":123}",
                      getStringFromInputStream(in).trim());
     }
     
     @Test
+    public void testGetSuperBookProxy() throws Exception {
+        
+        String endpointAddress =
+            "http://localhost:" + PORT + "/webapp/store2";
+        BookStoreSpring proxy = JAXRSClientFactory.create(endpointAddress, BookStoreSpring.class, 
+            Collections.singletonList(new JacksonJsonProvider()));
+        SuperBook book = proxy.getSuperBookJson();
+        assertEquals(999L, book.getId());
+    }
+    
+    @Test
+    public void testEchoSuperBookProxy() throws Exception {
+        
+        String endpointAddress =
+            "http://localhost:" + PORT + "/webapp/store2";
+        BookStoreSpring proxy = JAXRSClientFactory.create(endpointAddress, BookStoreSpring.class, 
+            Collections.singletonList(new JacksonJsonProvider()));
+        SuperBook book = proxy.echoSuperBookJson(new SuperBook("Super", 124L));
+        assertEquals(124L, book.getId());
+    }
+    
+    @Test
     public void testGetCollectionOfBooks() throws Exception {
         
         String endpointAddress =
-            "http://localhost:" + PORT + "/webapp/bookstore/collections"; 
+            "http://localhost:" + PORT + "/webapp/store1/bookstore/collections"; 
         WebClient wc = WebClient.create(endpointAddress,
             Collections.singletonList(new JacksonJsonProvider()));
         wc.accept("application/json");

Modified: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml?rev=1505686&r1=1505685&r2=1505686&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml (original)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml Mon Jul 22 13:59:19 2013
@@ -28,15 +28,26 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
 	<import resource="classpath:/META-INF/cxf/cxf.xml"/>
 
     <jaxrs:server id="bookservice"
-                  address="/">
+                  address="/store1">
         <jaxrs:serviceBeans>
-            <ref bean="petstore"/>
             <ref bean="bookstore"/>
         </jaxrs:serviceBeans>
         <jaxrs:providers>
-            <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
+            <ref bean="jackson"/>
         </jaxrs:providers>
     </jaxrs:server>
-    <bean id="bookstore" scope="prototype" class="org.apache.cxf.systest.jaxrs.BookStore"/>
-    <bean id="petstore" scope="prototype" class="org.apache.cxf.systest.jaxrs.PetStore"/>
+    
+    <jaxrs:server id="bookservice2"
+                  address="/store2">
+        <jaxrs:serviceBeans>
+            <ref bean="bookstore2"/>
+        </jaxrs:serviceBeans>
+        <jaxrs:providers>
+            <ref bean="jackson"/>
+        </jaxrs:providers>
+    </jaxrs:server>
+    
+    <bean id="jackson" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"/>
+    <bean id="bookstore" class="org.apache.cxf.systest.jaxrs.BookStore"/>
+    <bean id="bookstore2" class="org.apache.cxf.systest.jaxrs.BookStoreSpring"/>
 </beans>