From c9452469253d0892e72acad5c03e0b42a6a181e4 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 6 Sep 2010 16:49:56 +0000 Subject: TUSCANY-3667 - Handled AccessControlException when processing private folders in a contribution deployed to Google AppEngine environment git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@993092 13f79535-47bb-0310-9956-ffa450edef68 --- .../scanner/impl/DirectoryContributionScanner.java | 70 +++++++++++++--------- 1 file changed, 42 insertions(+), 28 deletions(-) (limited to 'sca-java-2.x/trunk/modules/contribution/src/main/java') diff --git a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java index 0800dfaac5..9612a8336e 100644 --- a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java +++ b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/scanner/impl/DirectoryContributionScanner.java @@ -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.contribution.scanner.ContributionScanner; * @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 DirectoryContributionScanner implements ContributionScanner { 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 DirectoryContributionScanner implements ContributionScanner { return artifacts; } - + /** * Scan the contribution to retrieve all artifact uris - * + * * @param contribution * @return * @throws ContributionReadException @@ -92,10 +97,10 @@ public class DirectoryContributionScanner implements ContributionScanner { } catch (IOException e) { throw new ContributionReadException(e); } - + return artifacts; } - + /** * Recursively traverse a root directory * @@ -106,33 +111,42 @@ public class DirectoryContributionScanner implements ContributionScanner { * @throws IOException */ private static void traverse(List fileList, File file, File root, Set 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 DirectoryContributionScanner implements ContributionScanner { } return file; } - + } -- cgit v1.2.3