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 2010/11/22 14:19:23 UTC

svn commit: r1037709 - in /cxf/branches/2.3.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/

Author: sergeyb
Date: Mon Nov 22 13:19:23 2010
New Revision: 1037709

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

........
  r1037707 | sergeyb | 2010-11-22 13:14:14 +0000 (Mon, 22 Nov 2010) | 1 line
  
  [CXF-3110] Minor update for xml adapters with parameterized types work better
........

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/provider/AbstractJAXBProvider.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java

Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Nov 22 13:19:23 2010
@@ -1 +1 @@
-/cxf/trunk:1036840,1036917
+/cxf/trunk:1036840,1036917,1037707

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/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1037709&r1=1037708&r2=1037709&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Mon Nov 22 13:19:23 2010
@@ -358,8 +358,10 @@ public abstract class AbstractJAXBProvid
             JAXBContext context = packageContexts.get(packageName);
             if (context == null) {
                 try {
-                    context = JAXBContext.newInstance(packageName, type.getClassLoader(), cProperties);
-                    packageContexts.put(packageName, context);
+                    if (type.getClassLoader() != null) { 
+                        context = JAXBContext.newInstance(packageName, type.getClassLoader(), cProperties);
+                        packageContexts.put(packageName, context);
+                    }
                 } catch (JAXBException ex) {
                     LOG.fine("Error creating a JAXBContext using ObjectFactory : " 
                                 + ex.getMessage());
@@ -447,7 +449,7 @@ public abstract class AbstractJAXBProvid
             } else {
                 Type[] types = InjectionUtils.getActualTypes(adapter.value().getGenericSuperclass());
                 if (types != null && types.length == 2) {
-                    theType = (Class)types[0];
+                    theType = InjectionUtils.getActualType(types[0]);
                 }
             }
         }

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1037709&r1=1037708&r2=1037709&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java Mon Nov 22 13:19:23 2010
@@ -25,12 +25,16 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.GregorianCalendar;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -453,6 +457,17 @@ public class BookStore {
         return new BookInfo(doGetBook("123"));
     }
     
+    @POST
+    @Path("/books/adapter-list")
+    @XmlJavaTypeAdapter(BookInfoAdapterList.class)
+    public Set<Book> getBookAdapterList(Set<Book> collection) 
+        throws Exception {
+        if (collection.size() != 1) {
+            throw new WebApplicationException(400);
+        }
+        return Collections.singleton(doGetBook(Long.toString(collection.iterator().next().getId())));
+    }
+    
     @GET
     @Path("/books/interface/adapter")
     public BookInfoInterface getBookAdapter2() throws Exception {
@@ -805,6 +820,18 @@ public class BookStore {
         }
     }
     
+    public static class BookInfoAdapterList extends XmlAdapter<List<Book>, Set<Book>> {
+
+        public List marshal(Set<Book> set) throws Exception {
+            return new ArrayList<Book>(set);
+        }
+
+        public Set<Book> unmarshal(List<Book> list) throws Exception {
+            return new HashSet<Book>(list);
+        }
+        
+    }
+    
     public static class BookInfoAdapter extends XmlAdapter<Book, BookInfo> {
 
         @Override

Modified: cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1037709&r1=1037708&r2=1037709&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original)
+++ cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Mon Nov 22 13:19:23 2010
@@ -26,7 +26,9 @@ import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
@@ -45,8 +47,10 @@ import org.apache.cxf.jaxrs.client.JAXRS
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.ext.xml.XMLSource;
+import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
 import org.apache.cxf.jaxrs.provider.XSLTJaxbProvider;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.transport.http.HTTPConduit;
 
 import org.junit.BeforeClass;
 import org.junit.Ignore;
@@ -653,6 +657,25 @@ public class JAXRSClientServerBookTest e
     }
     
     @Test
+    public void testPostGetBookAdapterList() throws Exception {
+        JAXBElementProvider provider = new JAXBElementProvider();
+        Map<String, String> outMap = new HashMap<String, String>();
+        outMap.put("Books", "CollectionWrapper");
+        outMap.put("books", "Book");
+        provider.setOutTransformElements(outMap);
+        WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/adapter-list",
+                                        Collections.singletonList(provider));
+        
+        HTTPConduit conduit = WebClient.getConfig(wc).getHttpConduit();
+        conduit.getClient().setReceiveTimeout(1000000);
+        conduit.getClient().setConnectionTimeout(1000000);
+        Collection<? extends Book> books = wc.type("application/xml").accept("application/xml")
+            .postAndGetCollection(new Books(new Book("CXF", 123L)), Book.class);
+        assertEquals(1, books.size());
+        assertEquals(123L, books.iterator().next().getId());
+    }
+    
+    @Test
     public void testGetBookAdapterInterface() throws Exception {
         getAndCompareAsStrings("http://localhost:" + PORT + "/bookstore/books/interface/adapter",
                                "resources/expected_get_book123.txt",