You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2007/07/20 01:59:32 UTC
svn commit: r557820 - in /webservices/axis2/trunk/java/modules:
jaxws/src/org/apache/axis2/jaxws/client/async/
jaxws/src/org/apache/axis2/jaxws/message/attachments/
jaxws/src/org/apache/axis2/jaxws/message/impl/
kernel/src/org/apache/axis2/transport/ k...
Author: dims
Date: Thu Jul 19 16:59:30 2007
New Revision: 557820
URL: http://svn.apache.org/viewvc?view=rev&rev=557820
Log:
Fix for AXIS2-2596 - Clean up cached attachment files
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/async/AsyncResponse.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/AttachmentUtils.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/async/AsyncResponse.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/async/AsyncResponse.java?view=diff&rev=557820&r1=557819&r2=557820
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/async/AsyncResponse.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/async/AsyncResponse.java Thu Jul 19 16:59:30 2007
@@ -25,6 +25,7 @@
import org.apache.axis2.jaxws.handler.HandlerChainProcessor;
import org.apache.axis2.jaxws.handler.HandlerInvokerUtils;
import org.apache.axis2.jaxws.handler.TransportHeadersAdapter;
+import org.apache.axis2.jaxws.message.attachments.AttachmentUtils;
import org.apache.axis2.jaxws.spi.Constants;
import org.apache.axis2.jaxws.spi.migrator.ApplicationContextMigratorUtil;
import org.apache.commons.logging.Log;
@@ -101,6 +102,12 @@
response = mc;
response.setEndpointDescription(endpointDescription);
+
+ // Check for cached attachment file(s) if attachments exist.
+ if(response.getAxisMessageContext().getAttachmentMap() != null){
+ AttachmentUtils.findCachedAttachment(response.getAxisMessageContext().getAttachmentMap());
+ }
+
latch.countDown();
if (log.isDebugEnabled()) {
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/AttachmentUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/AttachmentUtils.java?view=diff&rev=557820&r1=557819&r2=557820
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/AttachmentUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/attachments/AttachmentUtils.java Thu Jul 19 16:59:30 2007
@@ -18,6 +18,8 @@
*/
package org.apache.axis2.jaxws.message.attachments;
+import org.apache.axiom.attachments.Attachments;
+import org.apache.axiom.attachments.CachedFileDataSource;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
@@ -28,7 +30,10 @@
import org.apache.commons.logging.LogFactory;
import javax.activation.DataHandler;
+import javax.activation.DataSource;
import javax.xml.namespace.QName;
+
+import java.io.File;
import java.util.ArrayList;
/** A suite of utilities used for handling MTOM attachment data. */
@@ -177,6 +182,43 @@
OMElement xop = factory.createOMElement(XOP_INCLUDE, null);
xop.addAttribute("href", data.getContentID(), null);
return xop;
+ }
+
+ /**
+ * Process attachment's dataHandlers for CachedFileDataSource.
+ * If exist, execute file.deleteOnExit() request on the cached
+ * attachment file referenced by each CachedFileDataSource.
+ * This will delete the cached attachment file on JVM exit.
+ *
+ * @param attachments
+ */
+ public static void findCachedAttachment(Attachments attachments){
+ if(attachments == null){
+ return;
+ }
+
+ String[] contentIds = attachments.getAllContentIDs();
+ if(contentIds.length > 0){
+ if (log.isDebugEnabled()) {
+ log.debug("Attachments exist....");
+ }
+ for(int i=0; i < contentIds.length; i++){
+ DataHandler dh = attachments.getDataHandler(contentIds[i]);
+ if(dh != null){
+ DataSource dataSource = dh.getDataSource();
+ if(dh != null && dataSource instanceof CachedFileDataSource){
+ if (log.isDebugEnabled()) {
+ log.debug("Attachment's DataHandler uses CachedFileDataSource...");
+ }
+ File file = ((CachedFileDataSource)dataSource).getFile();
+ if (log.isDebugEnabled()) {
+ log.debug(" Making file.deleteOnExit() request on "+file.getAbsolutePath());
+ }
+ file.deleteOnExit();
+ }
+ }
+ }
+ }
}
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java?view=diff&rev=557820&r1=557819&r2=557820
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/impl/MessageImpl.java Thu Jul 19 16:59:30 2007
@@ -30,6 +30,7 @@
import org.apache.axis2.jaxws.message.Protocol;
import org.apache.axis2.jaxws.message.XMLFault;
import org.apache.axis2.jaxws.message.XMLPart;
+import org.apache.axis2.jaxws.message.attachments.AttachmentUtils;
import org.apache.axis2.jaxws.message.factory.BlockFactory;
import org.apache.axis2.jaxws.message.factory.SAAJConverterFactory;
import org.apache.axis2.jaxws.message.factory.SOAPEnvelopeBlockFactory;
@@ -607,6 +608,12 @@
}
attachments = newMap;
}
+
+ // Check for cached attachment file(s) if attachments exist.
+ if(attachments != null && !messageContext.getAxisMessageContext().isServerSide()){
+ AttachmentUtils.findCachedAttachment(attachments);
+ }
+
this.messageContext = messageContext;
}
public void setDoingSWA(boolean value) {
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?view=diff&rev=557820&r1=557819&r2=557820
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java Thu Jul 19 16:59:30 2007
@@ -20,6 +20,8 @@
package org.apache.axis2.transport;
+import org.apache.axiom.attachments.Attachments;
+import org.apache.axiom.attachments.CachedFileDataSource;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMOutputFormat;
@@ -44,8 +46,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.activation.DataSource;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.stream.XMLStreamException;
+
+import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
@@ -455,5 +460,46 @@
return null;
}
}
-
+
+ /**
+ * Clean up cached attachment file
+ * @param msgContext
+ */
+ public static void deleteAttachments(MessageContext msgContext) {
+ if (log.isDebugEnabled()) {
+ log.debug("Entering deleteAttachments()");
+ }
+
+ Attachments attachments = msgContext.getAttachmentMap();
+ if (attachments != null) {
+ String [] keys = attachments.getAllContentIDs();
+ if (keys != null) {
+ String key = null;
+ File file = null;
+ DataSource dataSource = null;
+ for (int i = 0; i < keys.length; i++) {
+ try {
+ key = keys[i];
+ dataSource = attachments.getDataHandler(key).getDataSource();
+ if(dataSource instanceof CachedFileDataSource){
+ file = ((CachedFileDataSource)dataSource).getFile();
+ if (log.isDebugEnabled()) {
+ log.debug("Delete cache attachment file: "+file.getName());
+ }
+ file.delete();
+ }
+ }
+ catch (Exception e) {
+ if (file != null) {
+ file.deleteOnExit();
+ }
+ }
+ }
+ }
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exiting deleteAttachments()");
+ }
+ }
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java?view=diff&rev=557820&r1=557819&r2=557820
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java Thu Jul 19 16:59:30 2007
@@ -182,6 +182,7 @@
}
} finally {
closeStaxBuilder(msgContext);
+ TransportUtils.deleteAttachments(msgContext);
}
} else {
if (!disableREST) {
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org