You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2011/08/07 16:31:55 UTC

svn commit: r1154710 - in /webservices/commons/trunk/modules/axiom: modules/axiom-api/src/main/java/org/apache/axiom/attachments/ modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ modules/axiom-api/src/test/java/org/apache/axiom/attach...

Author: veithen
Date: Sun Aug  7 14:31:54 2011
New Revision: 1154710

URL: http://svn.apache.org/viewvc?rev=1154710&view=rev
Log:
AXIOM-377: Make sure that we create a CachedFileDataSource for MIME parts buffered on disk. The cleanup logic in Axis2 depends on this.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartDataHandler.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnFile.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnMemory.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentStore.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java
    webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartDataHandler.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartDataHandler.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartDataHandler.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartDataHandler.java Sun Aug  7 14:31:54 2011
@@ -21,17 +21,26 @@ package org.apache.axiom.attachments;
 import java.io.IOException;
 
 import javax.activation.DataHandler;
+import javax.activation.DataSource;
 
 import org.apache.axiom.attachments.lifecycle.DataHandlerExt;
 
 class PartDataHandler extends DataHandler implements DataHandlerExt {
     private final PartImpl part;
+    private DataSource dataSource;
 
     public PartDataHandler(PartImpl part) {
         super(new PartDataSource(part));
         this.part = part;
     }
 
+    public DataSource getDataSource() {
+        if (dataSource == null) {
+            dataSource = part.getDataSource();
+        }
+        return dataSource == null ? super.getDataSource() : dataSource;
+    }
+
     public void purgeDataSource() throws IOException {
         part.releaseContent();
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java Sun Aug  7 14:31:54 2011
@@ -25,6 +25,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import javax.activation.DataHandler;
+import javax.activation.DataSource;
 import javax.mail.Header;
 import javax.mail.MessagingException;
 import javax.mail.internet.HeaderTokenizer;
@@ -139,6 +140,10 @@ final class PartImpl implements Part {
         return content.getInputStream();
     }
     
+    DataSource getDataSource() {
+        return content.getDataSource(getContentType());
+    }
+
     void writeTo(OutputStream out) throws IOException {
         content.writeTo(out);
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnFile.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnFile.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnFile.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnFile.java Sun Aug  7 14:31:54 2011
@@ -19,9 +19,11 @@
 
 package org.apache.axiom.attachments.impl;
 
+import org.apache.axiom.attachments.CachedFileDataSource;
 import org.apache.axiom.attachments.lifecycle.LifecycleManager;
 import org.apache.axiom.attachments.lifecycle.impl.FileAccessor;
 
+import javax.activation.DataSource;
 import javax.mail.MessagingException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -72,6 +74,14 @@ public class ContentOnFile extends Conte
         }
     }
     
+    public DataSource getDataSource(String contentType) {
+        // The attachment cleanup code in Axis2 relies on the assumption that we
+        // produce a CachedFileDataSource here.
+        CachedFileDataSource ds = new CachedFileDataSource(fileAccessor.getFile());
+        ds.setContentType(contentType);
+        return ds;
+    }
+
     public void writeTo(OutputStream out) throws IOException {
         InputStream in = getInputStream();
         try {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnMemory.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnMemory.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnMemory.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentOnMemory.java Sun Aug  7 14:31:54 2011
@@ -26,6 +26,8 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
 
+import javax.activation.DataSource;
+
 /**
  * PartOnMemoryEnhanced stores the attachment in memory (in non-contigous byte arrays)
  * This implementation is used for smaller attachments to enhance 
@@ -53,6 +55,11 @@ public class ContentOnMemory extends Con
         return new BAAInputStream(data, length);
     }
     
+    public DataSource getDataSource(String contentType) {
+        // Use a default implementation
+        return null;
+    }
+
     public void writeTo(OutputStream os) throws IOException {
         new BAAInputStream(data, length).writeTo(os);
     }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentStore.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentStore.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentStore.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/ContentStore.java Sun Aug  7 14:31:54 2011
@@ -23,12 +23,23 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
+import javax.activation.DataSource;
+
 /**
  * Stores the content of a MIME part.
  */
 public abstract class ContentStore {
     public abstract InputStream getInputStream() throws IOException;
 
+    /**
+     * Get a {@link DataSource} implementation specific for this buffering strategy.
+     * @param contentType TODO
+     * 
+     * @return the {@link DataSource} implementation or <code>null</code> if a default
+     *         {@link DataSource} implementation should be used
+     */
+    public abstract DataSource getDataSource(String contentType);
+    
     public abstract void writeTo(OutputStream out) throws IOException;
 
     public abstract long getSize();

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java Sun Aug  7 14:31:54 2011
@@ -60,10 +60,9 @@ public class PartOnFileTest extends Abst
 
         DataSource ds = dh.getDataSource();
         assertNotNull(ds);
-        // TODO: AXIOM-377 implies that we no longer get a FileDataSource; need some other way to test that the attachment is written to file
-//        if (!(ds instanceof FileDataSource)) {
-//            fail("Expected FileDataSource, but got " + ds.getClass().getName());
-//        }
+        if (!(ds instanceof FileDataSource)) {
+            fail("Expected FileDataSource, but got " + ds.getClass().getName());
+        }
 
         assertEquals("image/jpeg", dh.getContentType());
     }

Modified: webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml?rev=1154710&r1=1154709&r2=1154710&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml (original)
+++ webservices/commons/trunk/modules/axiom/src/docbkx/userguide.xml Sun Aug  7 14:31:54 2011
@@ -1388,14 +1388,6 @@ while (iterator.hasNext()) {
                                 allocated memory.
                             </para>
                         </listitem>
-                        <listitem>
-                            <para>
-                                The <classname>DataSource</classname> implementation used for <classname>DataHandler</classname>
-                                instances for MIME parts read from a stream is now always opaque, i.e. the implementation is
-                                an internal class not visible to application code. This implies that application code must not
-                                make the assumption that a MIME part buffered on disk uses a <classname>FileDataSource</classname>.
-                            </para>
-                        </listitem>
                     </itemizedlist>
                 </section>
             </section>