[jboss-svn-commits] JBL Code SVN: r8695 - labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 4 19:11:25 EST 2007


Author: kevin.conner at jboss.com
Date: 2007-01-04 19:11:23 -0500 (Thu, 04 Jan 2007)
New Revision: 8695

Modified:
   labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListener.java
Log:
Fallback to copy/delete if rename fails: JBESB-325

Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListener.java	2007-01-04 22:24:07 UTC (rev 8694)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/gateway/FileGatewayListener.java	2007-01-05 00:11:23 UTC (rev 8695)
@@ -26,6 +26,7 @@
 import java.io.File;
 import java.io.FileFilter;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 
 import org.jboss.soa.esb.helpers.ConfigTree;
@@ -99,7 +100,17 @@
 	@Override
 	boolean renameFile(File from, File to) throws GatewayException 
 	{
-		return from.renameTo(to);
+		if (to.exists() && !to.delete())
+		{
+			throw new GatewayException("Cannot delete target file: " + to.getAbsolutePath()) ;
+		}
+		
+		if (!from.renameTo(to))
+		{
+			copyFile(from, to) ;
+			from.delete() ;
+		}
+		return true ;
 	}
 	
 	@Override
@@ -111,6 +122,68 @@
     	_logger.warn("No <"+ListenerTagNames.ACTION_ELEMENT_TAG+"> element found in cofiguration"
     			+" -  Using default composer class : "+_composerName);
 	}
+	
+	protected void copyFile(final File from, final File to)
+		throws GatewayException
+	{
+		final FileInputStream fis ;
+		try
+		{
+			fis = new FileInputStream(from) ;
+		}
+		catch (final IOException ioe)
+		{
+			throw new GatewayException("Could not open input file for reading", ioe) ;
+		}
+		try
+		{
+			final FileOutputStream fos ;
+			try
+			{
+				fos = new FileOutputStream(to) ;
+			}
+			catch (final IOException ioe)
+			{
+				throw new GatewayException("Could not open output file for writing", ioe) ;
+			}
+			
+			try
+			{
+				final long filesize = from.length() ;
+				final byte[] buffer = (filesize > 256 ? new byte[256] : new byte[(int)filesize]) ;
+				while(true)
+				{
+					final int count = fis.read(buffer) ;
+					if (count < 0)
+					{
+						break ;
+					}
+					fos.write(buffer, 0, count) ;
+				}
+			}
+			catch (final IOException ioe)
+			{
+				throw new GatewayException("Error copying file", ioe) ;
+			}
+			finally
+			{
+				try
+				{
+					fos.close() ;
+				}
+				catch (final IOException ioe) {} // ignore
+			}
+		}
+		finally
+		{
+			try
+			{
+				fis.close() ;
+			}
+			catch (final IOException ioe) {} // ignore
+		}
+	}
+	
 //______________________________________________________________________________
     /**
      * Default gateway action for files




More information about the jboss-svn-commits mailing list