You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2012/07/13 02:13:54 UTC

svn commit: r1361011 - in /cxf/branches/2.4.x-fixes: ./ rt/core/src/main/java/org/apache/cxf/attachment/ systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ systests/uncategorized/src/test/resources/ testutils/src/main/java/org/apache/cxf...

Author: ffang
Date: Fri Jul 13 00:13:54 2012
New Revision: 1361011

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

................
  r1360869 | dkulp | 2012-07-13 03:24:15 +0800 (δΊ”, 13  7 2012) | 17 lines
  
  Merged revisions 1360678 via  git cherry-pick from
  https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes
  
  ........
    r1360678 | dkulp | 2012-07-12 09:47:50 -0400 (Thu, 12 Jul 2012) | 10 lines
  
    Merged revisions 1360644 via  git cherry-pick from
    https://svn.apache.org/repos/asf/cxf/trunk
  
    ........
      r1360644 | ffang | 2012-07-12 07:58:42 -0400 (Thu, 12 Jul 2012) | 2 lines
  
      [CXF-4420]CXF JAXWS MTOM should be able to extract Content-Disposition and setName accordingly for AttachmentDataSource
  
    ........
  
  ........
................

Added:
    cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/resources/me.bmp
      - copied unchanged from r1360869, cxf/branches/2.5.x-fixes/systests/uncategorized/src/test/resources/me.bmp
Modified:
    cxf/branches/2.4.x-fixes/   (props changed)
    cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java
    cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentUtil.java
    cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java
    cxf/branches/2.4.x-fixes/testutils/src/main/java/org/apache/cxf/mtom_xop/TestMtomImpl.java

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/branches/2.5.x-fixes:r1360869

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/AttachmentDataSource.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java?rev=1361011&r1=1361010&r2=1361011&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java (original)
+++ cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/attachment/AttachmentDataSource.java Fri Jul 13 00:13:54 2012
@@ -34,6 +34,7 @@ public class AttachmentDataSource implem
     private CachedOutputStream cache;
     private InputStream ins;
     private DelegatingInputStream delegate;
+    private String name;
     
     public AttachmentDataSource(String ctParam, InputStream inParam) throws IOException {
         this.ct = ctParam;        
@@ -84,7 +85,11 @@ public class AttachmentDataSource implem
     }
 
     public String getName() {
-        return null;
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
     }
 
     public OutputStream getOutputStream() throws IOException {

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=1361011&r1=1361010&r2=1361011&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 Fri Jul 13 00:13:54 2012
@@ -34,6 +34,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
+import java.util.StringTokenizer;
 import java.util.UUID;
 
 import javax.activation.CommandMap;
@@ -45,6 +46,7 @@ import javax.activation.URLDataSource;
 import javax.mail.Header;
 import javax.mail.internet.InternetHeaders;
 
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.HttpHeaderHelper;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Attachment;
@@ -180,6 +182,24 @@ public final class AttachmentUtil {
         AttachmentImpl att = new AttachmentImpl(id);
         
         final String ct = headers.getHeader("Content-Type", null);
+        String cd = headers.getHeader("Content-Disposition", null);
+        String fileName = null;
+        if (!StringUtils.isEmpty(cd)) {
+            StringTokenizer token = new StringTokenizer(cd, ";");
+            while (token.hasMoreElements()) {
+                fileName = token.nextToken();
+                if (fileName.startsWith("name=")) {
+                    break;
+                }
+            }
+            if (!StringUtils.isEmpty(fileName)) {
+                if (fileName.indexOf("\"") > 0) {
+                    fileName = fileName.substring(fileName.indexOf("\"") + 1, fileName.lastIndexOf("\""));
+                } else {
+                    fileName = fileName.substring(fileName.indexOf("=") + 1);
+                }
+            }
+        }
         
         boolean quotedPrintable = false;
         
@@ -198,9 +218,15 @@ public final class AttachmentUtil {
         if (quotedPrintable) {
             DataSource source = new AttachmentDataSource(ct, 
                                                          new QuotedPrintableDecoderStream(stream));
+            if (!StringUtils.isEmpty(fileName)) {
+                ((AttachmentDataSource)source).setName(fileName);
+            }
             att.setDataHandler(new DataHandler(source));
         } else {
             DataSource source = new AttachmentDataSource(ct, stream);
+            if (!StringUtils.isEmpty(fileName)) {
+                ((AttachmentDataSource)source).setName(fileName);
+            }
             att.setDataHandler(new DataHandler(source));
         }
         
@@ -280,6 +306,14 @@ public final class AttachmentUtil {
             throw new Fault(e);
         }
         AttachmentImpl att = new AttachmentImpl(id, handler);
+        if (!StringUtils.isEmpty(handler.getName())) {
+            //set Content-Disposition attachment header if filename isn't null
+            String file = handler.getName();
+            if (StringUtils.isFileExist(file)) {
+                file = file.substring(file.lastIndexOf(File.separator) + 1);
+            }
+            att.setHeader("Content-Disposition", "attachment;name=\"" + file + "\"");
+        }
         att.setXOP(isXop);
         return att;
     }

Modified: cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java?rev=1361011&r1=1361010&r2=1361011&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java (original)
+++ cxf/branches/2.4.x-fixes/systests/uncategorized/src/test/java/org/apache/cxf/systest/mtom/ClientMtomXopTest.java Fri Jul 13 00:13:54 2012
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.UndeclaredThrowableException;
+import java.net.URL;
 
 import javax.activation.DataHandler;
 import javax.mail.util.ByteArrayDataSource;
@@ -162,6 +163,40 @@ public class ClientMtomXopTest extends A
             throw ex;
         }
     }
+    
+    @Test
+    public void testMtomWithFileName() throws Exception {
+        TestMtom mtomPort = createPort(MTOM_SERVICE, MTOM_PORT, TestMtom.class, true, true);
+        try {
+            Holder<DataHandler> param = new Holder<DataHandler>();
+            Holder<String> name; 
+                        
+            URL fileURL = getClass().getClassLoader().getResource("me.bmp");
+            
+            ((BindingProvider)mtomPort).getRequestContext().put("schema-validation-enabled",
+                                                                Boolean.TRUE);
+            param.value = new DataHandler(fileURL);
+            name = new Holder<String>("have name");
+            mtomPort.testXop(name, param);
+            assertEquals("can't get file name", "return detail + me.bmp", name.value);
+            assertNotNull(param.value);
+                      
+           
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception)ex.getCause();
+        } catch (Exception ex) {
+            if (ex.getMessage().contains("Connection reset")
+                && System.getProperty("java.specification.version", "1.5").contains("1.6")) {
+                //There seems to be a bug/interaction with Java 1.6 and Jetty where
+                //Jetty will occasionally send back a RST prior to all the data being 
+                //sent back to the client when using localhost (which is what we do)
+                //we'll ignore for now
+                return;
+            }
+            System.out.println(System.getProperties());
+            throw ex;
+        }
+    }
 
     @org.junit.Ignore // see CXF-1395
     @Test

Modified: cxf/branches/2.4.x-fixes/testutils/src/main/java/org/apache/cxf/mtom_xop/TestMtomImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/testutils/src/main/java/org/apache/cxf/mtom_xop/TestMtomImpl.java?rev=1361011&r1=1361010&r2=1361011&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/testutils/src/main/java/org/apache/cxf/mtom_xop/TestMtomImpl.java (original)
+++ cxf/branches/2.4.x-fixes/testutils/src/main/java/org/apache/cxf/mtom_xop/TestMtomImpl.java Fri Jul 13 00:13:54 2012
@@ -35,7 +35,11 @@ import org.apache.cxf.mime.types.XopStri
 public class TestMtomImpl implements TestMtom {
 
     public void testXop(Holder<String> name, Holder<DataHandler> attachinfo) {
-        name.value = "return detail + " + name.value;
+        if (name.value.equals("have name") && attachinfo.value.getName() != null) {
+            name.value = "return detail + " + attachinfo.value.getName();
+        } else {
+            name.value = "return detail + " + name.value;
+        }
     }
 
     public XopStringType testXopString(XopStringType data) {