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;
}
-
+
}