Author: sergeyb
Date: Wed Oct 10 11:40:35 2012
New Revision: 1396550

URL: http://svn.apache.org/viewvc?rev=1396550&view=rev
Log:
[CXF-4349] Reverting some of the updates, using a workaround to get xsi:type 
generated

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
 Wed Oct 10 11:40:35 2012
@@ -628,13 +628,9 @@ public class ClientProxyImpl extends Abs
                                                   : 
aMethod.getParameterAnnotations()[bodyIndex];
             try {
                 if (bodyIndex != -1) {
-                    Class<?> paramClass = 
method.getParameterTypes()[bodyIndex];
                     Type paramType = 
method.getGenericParameterTypes()[bodyIndex];
                     
-                    boolean isAssignable = 
paramClass.isAssignableFrom(body.getClass());
-                    writeBody(body, outMessage,
-                              isAssignable ? paramClass : body.getClass(),
-                              isAssignable ? paramType : body.getClass(),
+                    writeBody(body, outMessage, body.getClass(), paramType,
                               anns, os);
                 } else {
                     writeBody(body, outMessage, body.getClass(), 
body.getClass(), 

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
 Wed Oct 10 11:40:35 2012
@@ -218,7 +218,7 @@ public class JAXRSOutInterceptor extends
                 ? ori.getMethodToInvoke() : ori.getAnnotatedMethod();
         }
         boolean asyncResponse = exchange.get(AsyncResponse.class) != null;
-        Class<?> targetType = getRawResponseClass(invoked, responseObj, 
asyncResponse);
+        Class<?> targetType = getRawResponseClass(responseObj);
         Type genericType = getGenericResponseType(invoked, responseObj, 
targetType, asyncResponse);
         if (genericType instanceof TypeVariable) {
             genericType = 
InjectionUtils.getSuperType(ori.getClassResourceInfo().getServiceClass(), 
@@ -415,14 +415,12 @@ public class JAXRSOutInterceptor extends
         
     }
     
-    private Class<?> getRawResponseClass(Method invoked, Object targetObject, 
boolean async) {
+    private Class<?> getRawResponseClass(Object targetObject) {
         if (GenericEntity.class.isAssignableFrom(targetObject.getClass())) {
             return ((GenericEntity<?>)targetObject).getRawType();
         } else {
             Class<?> targetClass = targetObject.getClass();
-            Class<?> responseClass = async || invoked == null 
-                || !invoked.getReturnType().isAssignableFrom(targetClass) ? 
targetClass : invoked.getReturnType(); 
-            return ClassHelper.getRealClassFromClass(responseClass);
+            return ClassHelper.getRealClassFromClass(targetClass);
         }
     }
     

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
 Wed Oct 10 11:40:35 2012
@@ -118,7 +118,7 @@ public abstract class AbstractJAXBProvid
     
     private String collectionWrapperName;
     private Map<String, String> collectionWrapperMap;
-    private List<String> jaxbElementClassNames = Collections.emptyList();
+    private List<String> jaxbElementClassNames;
     private Map<String, Object> cProperties;
     private Map<String, Object> uProperties;
     
@@ -226,19 +226,34 @@ public abstract class AbstractJAXBProvid
     protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls, 
Type genericType) 
         throws Exception {
         
-        boolean asJaxbElement = jaxbElementClassNames.contains(cls.getName());
+        Class<?> jaxbElementCls = jaxbElementClassNames == null ? null : 
getJaxbElementClass(cls);
+        boolean asJaxbElement = jaxbElementCls != null;
         if (!asJaxbElement && isXmlRoot(cls)) {
             return obj;
         }
-        
+        if (jaxbElementCls == null) {
+            jaxbElementCls = cls;
+        }
         QName name = null;
-        String expandedName = jaxbElementClassMap.get(cls.getName());
+        String expandedName = 
jaxbElementClassMap.get(jaxbElementCls.getName());
         if (expandedName != null) {
             name = JAXRSUtils.convertStringToQName(expandedName);
         } else if (marshalAsJaxbElement || asJaxbElement) {
-            name = getJaxbQName(cls, genericType, obj, false);
+            name = getJaxbQName(jaxbElementCls, genericType, obj, false);
         }
-        return name != null ? new JAXBElement<Object>(name, (Class)cls, null, 
obj) : obj;
+        return name != null ? new JAXBElement<Object>(name, 
(Class)jaxbElementCls, null, obj) : obj;
+    }
+    
+    protected Class<?> getJaxbElementClass(Class<?> cls) {
+        if (cls == Object.class) {
+            return null;
+        }
+        if (jaxbElementClassNames.contains(cls.getName())) {
+            return cls;    
+        } else {
+            return getJaxbElementClass(cls.getSuperclass());
+        }
+        
     }
     
     public void setCollectionWrapperName(String wName) {

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 Wed Oct 10 11:40:35 2012
@@ -128,6 +128,12 @@ public class BookStore {
     }
     
     @GET
+    @Path("object")
+    public Object getBookAsObject() {
+        return new Book("Book as Object", 125L);
+    }
+    
+    @GET
     @Path("/default")
     @Produces("application/xml")
     public Book getDefaultBook() {

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1396550&r1=1396549&r2=1396550&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 Wed Oct 10 11:40:35 2012
@@ -79,7 +79,7 @@ public class JAXRSClientServerBookTest e
     public static void startServers() throws Exception {
         AbstractResourceInfo.clearAllMaps();
         assertTrue("server did not launch correctly",
-                   launchServer(BookServer.class));
+                   launchServer(BookServer.class, true));
         createStaticBus();
     }
     
@@ -185,6 +185,16 @@ public class JAXRSClientServerBookTest e
     }
     
     @Test
+    public void testGetBookAsObject() throws Exception {
+        
+        String endpointAddress =
+            "http://localhost:"; + PORT + "/bookstore/object"; 
+        WebClient wc = WebClient.create(endpointAddress);
+        Book b = wc.get(Book.class);
+        assertEquals("Book as Object", b.getName());
+    }
+    
+    @Test
     public void testProcessingInstruction() throws Exception {
         String base = "http://localhost:"; + PORT;
         String endpointAddress = base + "/bookstore/name-in-query"; 


Reply via email to