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 2011/01/07 17:41:31 UTC

svn commit: r1056379 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/

Author: sergeyb
Date: Fri Jan  7 16:41:31 2011
New Revision: 1056379

URL: http://svn.apache.org/viewvc?rev=1056379&view=rev
Log:
Merged revisions 1056347 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1056347 | sergeyb | 2011-01-07 15:26:12 +0000 (Fri, 07 Jan 2011) | 1 line
  
  [CXF-3234] Minor update to JAXRSOutInterceptor for response Type be correctly determined
........

Added:
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/StringTextWriter.java
      - copied unchanged from r1056347, cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/StringTextWriter.java
Modified:
    cxf/branches/2.3.x-fixes/   (props changed)
    cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan  7 16:41:31 2011
@@ -1 +1 @@
-/cxf/trunk:1055184,1055554,1055566,1055582,1055584,1055649,1055817,1055895
+/cxf/trunk:1055184,1055554,1055566,1055582,1055584,1055649,1055817,1055895,1056347

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1056379&r1=1056378&r2=1056379&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Fri Jan  7 16:41:31 2011
@@ -202,22 +202,21 @@ public class JAXRSOutInterceptor extends
             invoked = ori == null ? null : ori.getAnnotatedMethod() == null
                 ? ori.getMethodToInvoke() : ori.getAnnotatedMethod();
         }
+        
         Class<?> targetType = getRawResponseClass(responseObj);
-        Type genericType = 
-            getGenericResponseType(ori == null ? null : invoked, responseObj);
+        Type genericType = getGenericResponseType(ori == null ? null : invoked, responseObj, targetType);
         if (genericType instanceof TypeVariable) {
             genericType = InjectionUtils.getSuperType(ori.getClassResourceInfo().getServiceClass(), 
                                                        (TypeVariable)genericType);
         }
         
+        Annotation[] annotations = invoked != null ? invoked.getAnnotations() : new Annotation[]{};
+        
         MessageBodyWriter writer = null;
         MediaType responseType = null;
         for (MediaType type : availableContentTypes) { 
             writer = ProviderFactory.getInstance(message)
-                .createMessageBodyWriter(targetType, genericType, 
-                      invoked != null ? invoked.getAnnotations() : new Annotation[]{}, 
-                      type,
-                      message);
+                .createMessageBodyWriter(targetType, genericType, annotations, type, message);
             
             if (writer != null) {
                 responseType = type;
@@ -239,8 +238,6 @@ public class JAXRSOutInterceptor extends
             LOG.fine("Response content type is: " + responseType.toString());
             message.put(Message.CONTENT_TYPE, responseType.toString());
             
-            Annotation[] annotations = invoked != null ? invoked.getAnnotations() : new Annotation[]{};
-            
             long size = writer.getSize(entity, targetType, genericType, annotations, responseType);
             if (size > 0) {
                 LOG.fine("Setting ContentLength to " + size + " as requested by " 
@@ -409,11 +406,17 @@ public class JAXRSOutInterceptor extends
         }
     }
     
-    private Type getGenericResponseType(Method invoked, Object targetObject) {
+    private Type getGenericResponseType(Method invoked, Object targetObject, Class<?> targetType) {
         if (GenericEntity.class.isAssignableFrom(targetObject.getClass())) {
             return ((GenericEntity)targetObject).getType();
+        } else if (invoked == null || !invoked.getReturnType().isAssignableFrom(targetType)) {
+            // when a method has been invoked it is still possible that either an ExceptionMapper
+            // or a ResponseHandler filter overrides a response entity; if it happens then 
+            // the Type is the class of the response object, unless this new entity is assignable
+            // to invoked.getReturnType(); same applies to the case when a method returns Response
+            return targetObject.getClass(); 
         } else {
-            return invoked == null ? targetObject.getClass() : invoked.getGenericReturnType();
+            return invoked.getGenericReturnType();
         }
     }
     

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java?rev=1056379&r1=1056378&r2=1056379&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java Fri Jan  7 16:41:31 2011
@@ -259,7 +259,7 @@ public class JAXRSClientServerResourceCr
         assertNotNull(in);           
 
         assertEquals("Exception is not mapped correctly", 
-                     "Nonexistent method",
+                     "StringTextWriter - Nonexistent method",
                      getStringFromInputStream(in).trim());
     }
     

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml?rev=1056379&r1=1056378&r2=1056379&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml Fri Jan  7 16:41:31 2011
@@ -37,6 +37,7 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
             <bean class="org.apache.cxf.jaxrs.ext.codegen.CodeGeneratorProvider"/>
             <ref bean="exceptionMapper"/>
             <ref bean="exceptionMapper2"/>
+            <ref bean="plainTextProvider"/>
         </jaxrs:providers>
     </jaxrs:server>
     <bean id="bookstore" scope="prototype" class="org.apache.cxf.systest.jaxrs.BookStore"/>
@@ -45,4 +46,5 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
         <property name="toHandle" value="true"/>
     </bean>   
     <bean id="exceptionMapper2" class="org.apache.cxf.systest.jaxrs.RuntimeExceptionMapper"/>
+    <bean id="plainTextProvider" class="org.apache.cxf.systest.jaxrs.StringTextWriter"/>
 </beans>