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 2012/05/31 14:53:49 UTC

svn commit: r1344694 - in /cxf/branches/2.4.x-fixes: ./ rt/core/src/main/java/org/apache/cxf/attachment/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/ systests/jaxrs/src/test/java/org/apache...

Author: sergeyb
Date: Thu May 31 12:53:48 2012
New Revision: 1344694

URL: http://svn.apache.org/viewvc?rev=1344694&view=rev
Log:
Merged revisions 1344691 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes

................
  r1344691 | sergeyb | 2012-05-31 13:50:36 +0100 (Thu, 31 May 2012) | 9 lines
  
  Merged revisions 1344680 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/trunk
  
  ........
    r1344680 | sergeyb | 2012-05-31 13:33:07 +0100 (Thu, 31 May 2012) | 1 line
    
    [CXF-4348] Fixing the way Content-Type is set for the root part of outbound attachments
  ........
................

Modified:
    cxf/branches/2.4.x-fixes/   (props changed)
    cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java
    cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AttachmentOutInterceptor.java
    cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
    cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
    cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/branches/2.5.x-fixes:r1344691
  Merged /cxf/trunk:r1344680

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

Modified: cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java?rev=1344694&r1=1344693&r2=1344694&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java (original)
+++ cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java Thu May 31 12:53:48 2012
@@ -48,6 +48,7 @@ import javax.mail.internet.InternetHeade
 import org.apache.cxf.helpers.HttpHeaderHelper;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Attachment;
+import org.apache.cxf.message.MessageUtils;
 
 public final class AttachmentUtil {
     
@@ -72,6 +73,11 @@ public final class AttachmentUtil {
     public static CommandMap getCommandMap() {
         return COMMAND_MAP;
     }
+
+    public static boolean isMtomEnabled(Message message) {
+        Object prop = message.getContextualProperty(org.apache.cxf.message.Message.MTOM_ENABLED); 
+        return MessageUtils.isTrue(prop);
+    }
     
     /**
      * @param ns

Modified: cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AttachmentOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AttachmentOutInterceptor.java?rev=1344694&r1=1344693&r2=1344694&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AttachmentOutInterceptor.java (original)
+++ cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AttachmentOutInterceptor.java Thu May 31 12:53:48 2012
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.ResourceBundle;
 
 import org.apache.cxf.attachment.AttachmentSerializer;
+import org.apache.cxf.attachment.AttachmentUtil;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageUtils;
@@ -49,8 +50,7 @@ public class AttachmentOutInterceptor ex
         
         // Make it possible to step into this process in spite of Eclipse
         // by declaring the Object.
-        Object prop = message.getContextualProperty(org.apache.cxf.message.Message.MTOM_ENABLED); 
-        boolean mtomEnabled = MessageUtils.isTrue(prop);
+        boolean mtomEnabled = AttachmentUtil.isMtomEnabled(message);
         boolean writeAtts = MessageUtils.isTrue(message.getContextualProperty(WRITE_ATTACHMENTS))
             || (message.getAttachments() != null && !message.getAttachments().isEmpty());
         

Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java?rev=1344694&r1=1344693&r2=1344694&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java (original)
+++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/MessageContextImpl.java Thu May 31 12:53:48 2012
@@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletRes
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
@@ -49,6 +50,7 @@ import org.apache.cxf.interceptor.Attach
 import org.apache.cxf.io.CacheSizeExceededException;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
+import org.apache.cxf.jaxrs.impl.MetadataMap;
 import org.apache.cxf.jaxrs.impl.ProvidersImpl;
 import org.apache.cxf.jaxrs.interceptor.AttachmentInputInterceptor;
 import org.apache.cxf.jaxrs.interceptor.AttachmentOutputInterceptor;
@@ -185,11 +187,22 @@ public class MessageContextImpl implemen
         outMessage.setAttachments(atts);
         outMessage.put(AttachmentOutInterceptor.WRITE_ATTACHMENTS, "true");
         Attachment root = (Attachment)handlers.get(0);
+        
+        String rootContentType = root.getContentType().toString();
+        MultivaluedMap<String, String> rootHeaders = new MetadataMap<String, String>(root.getHeaders());
+        if (!AttachmentUtil.isMtomEnabled(outMessage)) {
+            rootHeaders.putSingle(Message.CONTENT_TYPE, rootContentType);
+        }
+        
+        String messageContentType = outMessage.get(Message.CONTENT_TYPE).toString();
+        int index = messageContentType.indexOf(";type");
+        if (index > 0) {
+            messageContentType = messageContentType.substring(0, index).trim();
+        }
         AttachmentOutputInterceptor attInterceptor =          
-            new AttachmentOutputInterceptor(outMessage.get(Message.CONTENT_TYPE).toString(),
-                                            root.getHeaders());
+            new AttachmentOutputInterceptor(messageContentType, rootHeaders);
         
-        outMessage.put(Message.CONTENT_TYPE, root.getContentType().toString());
+        outMessage.put(Message.CONTENT_TYPE, rootContentType);
         attInterceptor.handleMessage(outMessage);
     }
     

Modified: cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java?rev=1344694&r1=1344693&r2=1344694&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java (original)
+++ cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java Thu May 31 12:53:48 2012
@@ -333,6 +333,7 @@ public class JAXRSMultipartTest extends 
         conduit.getClient().setConnectionTimeout(1000000);
         
         client.type("multipart/related").accept("multipart/related");
+        
         XopType xop = new XopType();
         xop.setName("xopName");
         InputStream is = 
@@ -419,7 +420,6 @@ public class JAXRSMultipartTest extends 
         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);
@@ -428,6 +428,31 @@ public class JAXRSMultipartTest extends 
         Book json = result.get(1);
         assertEquals("json", json.getName());
         assertEquals(2L, json.getId());
+        
+        String contentType = 
+            WebClient.client(client).getResponse().getMetadata().getFirst("Content-Type").toString();
+        MediaType mt = MediaType.valueOf(contentType);
+        assertEquals("multipart", mt.getType());
+        assertEquals("mixed", mt.getSubtype());
+    }
+    
+    @Test
+    public void testGetBookJsonProxy() throws Exception {
+        String address = "http://localhost:" + PORT;
+        MultipartStore client = JAXRSClientFactory.create(address, MultipartStore.class);
+        
+        Map<String, Book> map = client.getBookJson();
+        List<Book> result = new ArrayList<Book>(map.values());
+        assertEquals(1, result.size());
+        Book json = result.get(0);
+        assertEquals("json", json.getName());
+        assertEquals(1L, json.getId());
+        
+        String contentType = 
+            WebClient.client(client).getResponse().getMetadata().getFirst("Content-Type").toString();
+        MediaType mt = MediaType.valueOf(contentType);
+        assertEquals("multipart", mt.getType());
+        assertEquals("mixed", mt.getSubtype());
     }
     
     @Test

Modified: cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java?rev=1344694&r1=1344693&r2=1344694&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java (original)
+++ cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java Thu May 31 12:53:48 2012
@@ -208,6 +208,17 @@ public class MultipartStore {
     }
     
     @GET
+    @Path("/books/jaxbjsonimage/read2")
+    @Produces("multipart/mixed")
+    public Map<String, Book> getBookJson() throws Exception {
+        Book json = new Book("json", 1L);
+        Map<String, Book> objects = new LinkedHashMap<String, Book>();
+        objects.put(MediaType.APPLICATION_JSON, json);
+        return objects;
+        
+    }
+    
+    @GET
     @Path("/books/jaxbjsonimage/read-object")
     @Produces("multipart/mixed")
     public Map<String, Object> getBookJaxbJsonObject() throws Exception {