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/27 13:02:01 UTC
svn commit: r1064095 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/
Author: sergeyb
Date: Thu Jan 27 12:02:00 2011
New Revision: 1064095
URL: http://svn.apache.org/viewvc?rev=1064095&view=rev
Log:
[CXF-3292] Fixing MultipartProvider to read maps
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java?rev=1064095&r1=1064094&r2=1064095&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/MultipartProvider.java Thu Jan 27 12:02:00 2011
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
@@ -126,8 +127,7 @@ public class MultipartProvider extends A
if (Collection.class.isAssignableFrom(c)
&& AnnotationUtils.getAnnotation(anns, Multipart.class) == null) {
- Class<?> actual = InjectionUtils.getActualType(t);
- actual = actual != null ? actual : Object.class;
+ Class<?> actual = getActualType(t, 0);
if (Attachment.class.isAssignableFrom(actual)) {
return infos;
}
@@ -137,6 +137,14 @@ public class MultipartProvider extends A
}
return objects;
}
+ if (Map.class.isAssignableFrom(c)) {
+ Map<String, Object> map = new LinkedHashMap<String, Object>(infos.size());
+ Class<?> actual = getActualType(t, 1);
+ for (Attachment a : infos) {
+ map.put(a.getContentType().toString(), fromAttachment(a, actual, actual, anns));
+ }
+ return map;
+ }
if (MultipartBody.class.isAssignableFrom(c)) {
return new MultipartBody(infos);
}
@@ -148,6 +156,16 @@ public class MultipartProvider extends A
throw new WebApplicationException(404);
}
+ private Class<?> getActualType(Type type, int pos) {
+ Class<?> actual = null;
+ try {
+ actual = InjectionUtils.getActualType(type, pos);
+ } catch (Exception ex) {
+ // ignore;
+ }
+ return actual != null && actual != Object.class ? actual : Attachment.class;
+ }
+
@SuppressWarnings("unchecked")
private Object fromAttachment(Attachment multipart, Class<?> c, Type t, Annotation anns[])
throws IOException {
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java?rev=1064095&r1=1064094&r2=1064095&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java Thu Jan 27 12:02:00 2011
@@ -353,6 +353,34 @@ public class JAXRSMultipartTest extends
}
@Test
+ public void testGetBookJaxbJsonProxy() throws Exception {
+ String address = "http://localhost:" + PORT;
+ MultipartStore client = JAXRSClientFactory.create(address, MultipartStore.class);
+
+
+ Map<String, Book> map = client.getBookJaxbJson();
+ List<Book> result = new ArrayList<Book>(map.values());
+ Book jaxb = result.get(0);
+ assertEquals("jaxb", jaxb.getName());
+ assertEquals(1L, jaxb.getId());
+ Book json = result.get(1);
+ assertEquals("json", json.getName());
+ assertEquals(2L, json.getId());
+ }
+
+ @Test
+ public void testGetBookJaxbJsonProxy2() throws Exception {
+ String address = "http://localhost:" + PORT;
+ MultipartStore client = JAXRSClientFactory.create(address, MultipartStore.class);
+
+ Map<String, Object> map = client.getBookJaxbJsonObject();
+ List<Object> result = new ArrayList<Object>(map.values());
+ assertEquals(2, result.size());
+ assertTrue(((Attachment)result.get(0)).getContentType().toString().contains("application/xml"));
+ assertTrue(((Attachment)result.get(1)).getContentType().toString().contains("application/json"));
+ }
+
+ @Test
public void testAddBookJaxbJsonImageAttachments() throws Exception {
String address = "http://localhost:" + PORT + "/bookstore/books/jaxbimagejson";
WebClient client = WebClient.create(address);
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java?rev=1064095&r1=1064094&r2=1064095&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java Thu Jan 27 12:02:00 2011
@@ -34,11 +34,13 @@ import javax.imageio.ImageIO;
import javax.mail.util.ByteArrayDataSource;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.xml.bind.JAXBContext;
@@ -171,6 +173,32 @@ public class MultipartStore {
}
+ @GET
+ @Path("/books/jaxbjsonimage/read")
+ @Produces("multipart/mixed")
+ public Map<String, Book> getBookJaxbJson() throws Exception {
+ Book jaxb = new Book("jaxb", 1L);
+ Book json = new Book("json", 2L);
+ Map<String, Book> objects = new LinkedHashMap<String, Book>();
+ objects.put(MediaType.APPLICATION_XML, jaxb);
+ objects.put(MediaType.APPLICATION_JSON, json);
+ return objects;
+
+ }
+
+ @GET
+ @Path("/books/jaxbjsonimage/read-object")
+ @Produces("multipart/mixed")
+ public Map<String, Object> getBookJaxbJsonObject() throws Exception {
+ Book jaxb = new Book("jaxb", 1L);
+ Book json = new Book("json", 2L);
+ Map<String, Object> objects = new LinkedHashMap<String, Object>();
+ objects.put(MediaType.APPLICATION_XML, jaxb);
+ objects.put(MediaType.APPLICATION_JSON, json);
+ return objects;
+
+ }
+
@POST
@Path("/books/stream")
@Produces("text/xml")