You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2010/09/06 18:49:56 UTC

svn commit: r993092 - /tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java

Author: lresende
Date: Mon Sep  6 16:49:56 2010
New Revision: 993092

URL: http://svn.apache.org/viewvc?rev=993092&view=rev
Log:
TUSCANY-3667 - Handled AccessControlException when processing private folders in a contribution deployed to Google AppEngine environment

Modified:
    tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java

Modified: tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java?rev=993092&r1=993091&r2=993092&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java Mon Sep  6 16:49:56 2010
@@ -24,10 +24,13 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.security.AccessControlException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.tuscany.sca.contribution.Artifact;
 import org.apache.tuscany.sca.contribution.Contribution;
@@ -42,8 +45,10 @@ import org.apache.tuscany.sca.contributi
  * @version $Rev$ $Date$
  */
 public class DirectoryContributionScanner implements ContributionScanner {
-    private ContributionFactory contributionFactory; 
-        
+	private static final Logger logger = Logger.getLogger(DirectoryContributionScanner.class.getName());
+
+    private ContributionFactory contributionFactory;
+
     public DirectoryContributionScanner(ContributionFactory contributionFactory) {
         this.contributionFactory = contributionFactory;
     }
@@ -63,7 +68,7 @@ public class DirectoryContributionScanne
                 Artifact artifact = contributionFactory.createArtifact();
                 artifact.setURI(uri);
                 artifact.setLocation(file.toURI().toURL().toString());
-                
+
                 artifacts.add(artifact);
             } catch (MalformedURLException e) {
                 throw new ContributionReadException(e);
@@ -74,10 +79,10 @@ public class DirectoryContributionScanne
         return artifacts;
     }
 
-    
+
     /**
      * Scan the contribution to retrieve all artifact uris
-     * 
+     *
      * @param contribution
      * @return
      * @throws ContributionReadException
@@ -92,10 +97,10 @@ public class DirectoryContributionScanne
         } catch (IOException e) {
             throw new ContributionReadException(e);
         }
-        
+
         return artifacts;
     }
-    
+
     /**
      * Recursively traverse a root directory
      *
@@ -106,33 +111,42 @@ public class DirectoryContributionScanne
      * @throws IOException
      */
     private static void traverse(List<String> fileList, File file, File root, Set<File> visited) throws IOException {
-        if (file.isFile()) {
-            fileList.add(root.toURI().relativize(file.toURI()).toString());
-        } else if (file.isDirectory()) {
-            File dir = file.getCanonicalFile();
-            if (!visited.contains(dir)) {
-                // [rfeng] Add the canonical file into the visited set to avoid duplicate navigation of directories
-                // following the symbolic links
-                visited.add(dir);
-                String uri = root.toURI().relativize(file.toURI()).toString();
-                if (uri.endsWith("/")) {
-                    uri = uri.substring(0, uri.length() - 1);
-                }
-                fileList.add(uri);
 
-                File[] files = file.listFiles();
-                for (File f : files) {
-                    if (!f.getName().startsWith(".")) {
-                        traverse(fileList, f, root, visited);
+    	//TUSCANY-3667 - Google add some private directories when you deploy your application
+    	//to GAE and trying to execute file IO operations on it's contents fails with AccessControlException
+    	try {
+            if (file.isFile()) {
+                fileList.add(root.toURI().relativize(file.toURI()).toString());
+            } else if (file.isDirectory()) {
+                File dir = file.getCanonicalFile();
+                if (!visited.contains(dir)) {
+                    // [rfeng] Add the canonical file into the visited set to avoid duplicate navigation of directories
+                    // following the symbolic links
+                    visited.add(dir);
+                    String uri = root.toURI().relativize(file.toURI()).toString();
+                    if (uri.endsWith("/")) {
+                        uri = uri.substring(0, uri.length() - 1);
+                    }
+                    fileList.add(uri);
+
+                    File[] files = file.listFiles();
+                    for (File f : files) {
+                        if (!f.getName().startsWith(".")) {
+                            traverse(fileList, f, root, visited);
+                        }
                     }
                 }
             }
-        }
+    	} catch (AccessControlException e) {
+    		//TUSCANY-3667 - Log the AccessControlException error and continue without processing the file/directory
+    		logger.log(Level.SEVERE, "Error traversing file:" + file.getPath());
+    	}
+
     }
-        
+
     /**
      * Get the contribution location as a file
-     * 
+     *
      * @param contribution
      * @return
      * @throws ContributionReadException
@@ -154,6 +168,6 @@ public class DirectoryContributionScanne
         }
         return file;
     }
-    
+
 
 }