Author: sergeyb
Date: Thu Dec 13 12:27:08 2012
New Revision: 1421245
URL: http://svn.apache.org/viewvc?rev=1421245&view=rev
Log:
[CXF-4697] Fixing MultipartProvider to correctly read Maps by applying a
quality patch from William Tam
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=1421245&r1=1421244&r2=1421245&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 Dec 13 12:27:08 2012
@@ -143,7 +143,7 @@ public class MultipartProvider extends A
&& AnnotationUtils.getAnnotation(anns, Multipart.class) == null) {
return getAttachmentCollection(t, infos, anns);
}
- if (Map.class.isAssignableFrom(c)) {
+ if (c.isAssignableFrom(Map.class)) {
Map<String, Object> map = new LinkedHashMap<String,
Object>(infos.size());
Class<?> actual = getActualType(t, 1);
for (Attachment a : infos) {
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=1421245&r1=1421244&r2=1421245&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 Dec 13 12:27:08 2012
@@ -244,6 +244,12 @@ public class JAXRSMultipartTest extends
}
@Test
+ public void testAddBookMixedMultiValueMapParameter() throws Exception {
+ String address = "http://localhost:" + PORT +
"/bookstore/books/mixedmultivaluedmap";
+ doAddBook("multipart/mixed", address, "attachmentFormMixed", 200);
+ }
+
+ @Test
public void testAddBookAsJAXBJSON() throws Exception {
String address = "http://localhost:" + PORT +
"/bookstore/books/jaxbjson";
doAddBook(address, "attachmentData2", 200);
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=1421245&r1=1421244&r2=1421245&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 Dec 13 12:27:08 2012
@@ -648,6 +648,36 @@ public class MultipartStore {
throw new WebApplicationException();
}
+ @POST
+ @Path("/books/mixedmultivaluedmap")
+ @Consumes("multipart/mixed")
+ @Produces("text/xml")
+ public Response addBookFromFormConsumesMixed(
+ @Multipart(value = "mapdata", type =
MediaType.APPLICATION_FORM_URLENCODED)
+ MultivaluedMap<String, String> data,
+ @Multipart(value = "test-cid", type = MediaType.APPLICATION_XML)
+ String testXml) throws Exception {
+ if (!"Dreams".equals(data.get("id-name").get(0))) {
+ throw new Exception("Map entry 0 does not match");
+ }
+ if (!"True".equals(data.get("entity-name").get(0))) {
+ throw new Exception("Map entry 1 does not match");
+ }
+ if (!"NAT5\n".equals(data.get("native-id").get(0))) {
+ throw new Exception("Map entry 2 does not match");
+ }
+ if (data.size() != 3) {
+ throw new Exception("Map size does not match");
+ }
+ if ("<hello>World2</hello>".equals(testXml)) {
+ throw new Exception("testXml does not match");
+ }
+
+ Book b = new Book();
+ b.setId(124);
+ b.setName("CXF in Action - 2");
+ return Response.ok(b).build();
+ }
private Response readBookFromInputStream(InputStream is) throws Exception {
JAXBContext c = JAXBContext.newInstance(new Class[]{Book.class});
Unmarshaller u = c.createUnmarshaller();