You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.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