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>