Author: jsdelfino
Date: Wed Aug 29 11:12:33 2007
New Revision: 570884

URL: http://svn.apache.org/viewvc?rev=570884&view=rev
Log:
Fix for TUSCANY-1605, allowing implementation-resource to serve in-jar 
resources.

Modified:
    
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/FolderContributionProcessor.java
    
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/JarContributionProcessor.java
    incubator/tuscany/java/sca/modules/http-jetty/pom.xml
    
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyDefaultServlet.java
    
incubator/tuscany/java/sca/modules/http-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatDefaultServlet.java

Modified: 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/FolderContributionProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/FolderContributionProcessor.java?rev=570884&r1=570883&r2=570884&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/FolderContributionProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/FolderContributionProcessor.java
 Wed Aug 29 11:12:33 2007
@@ -73,6 +73,8 @@
             }
             fileList.add(URI.create(uri));
             
+            //FIXME Do we really need to use a regexp here to filter out
+            // file names that start one or two dots?
             File[] files = 
file.listFiles(FileHelper.getFileFilter("[^\u002e].*", true));
             for (int i = 0; i < files.length; i++) {
                 traverse(fileList, files[i], root);

Modified: 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/JarContributionProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/JarContributionProcessor.java?rev=570884&r1=570883&r2=570884&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/JarContributionProcessor.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/processor/impl/JarContributionProcessor.java
 Wed Aug 29 11:12:33 2007
@@ -25,7 +25,9 @@
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
@@ -69,11 +71,10 @@
             throw new IllegalArgumentException("Invalid null source 
inputstream.");
         }
 
-        List<URI> artifacts = new ArrayList<URI>();
-
         // Assume the root is a jar file
         JarInputStream jar = new JarInputStream(inputStream);
         try {
+            Set<String> names = new HashSet<String>();
             while (true) {
                 JarEntry entry = jar.getNextJarEntry();
                 if (entry == null) {
@@ -82,13 +83,45 @@
                 }
 
                 // FIXME: Maybe we should externalize the filter as a property
-                if (!entry.getName().startsWith(".")) {
-                    artifacts.add(URI.create(entry.getName()));
+                String name = entry.getName(); 
+                if (!name.startsWith(".")) {
+                    
+                    // Trim trailing /
+                    if (name.endsWith("/")) {
+                        name = name.substring(0, name.length() - 1);
+                    }
+
+                    // Add the entry name
+                    if (!names.contains(name)) {
+                        names.add(name);
+                        
+                        // Add parent folder names to the list too
+                        for (;;) {
+                            int s = name.lastIndexOf('/');
+                            if (s == -1) {
+                                name = "";
+                            } else {
+                                name = name.substring(0, s);
+                            }
+                            if (!names.contains(name)) {
+                                names.add(name);
+                            } else {
+                                break;
+                            }
+                        }
+                    }
                 }
             }
+            
+            // Return list of URIs
+            List<URI> artifacts = new ArrayList<URI>();
+            for (String name: names) {
+                artifacts.add(URI.create(name));
+            }
+            return artifacts;
+            
         } finally {
             jar.close();
         }
-        return artifacts;
     }
 }

Modified: incubator/tuscany/java/sca/modules/http-jetty/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-jetty/pom.xml?rev=570884&r1=570883&r2=570884&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/http-jetty/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/http-jetty/pom.xml Wed Aug 29 11:12:33 
2007
@@ -38,13 +38,13 @@
         <dependency>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>jetty</artifactId>
-            <version>6.1.0</version>
+            <version>6.1.3</version>
         </dependency>
         
         <dependency>
             <groupId>org.mortbay.jetty</groupId>
             <artifactId>jetty-util</artifactId>
-            <version>6.1.0</version>
+            <version>6.1.3</version>
         </dependency>
         
         <dependency>

Modified: 
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyDefaultServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyDefaultServlet.java?rev=570884&r1=570883&r2=570884&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyDefaultServlet.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/http-jetty/src/main/java/org/apache/tuscany/sca/http/jetty/JettyDefaultServlet.java
 Wed Aug 29 11:12:33 2007
@@ -19,8 +19,15 @@
 
 package org.apache.tuscany.sca.http.jetty;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
 import org.mortbay.jetty.servlet.DefaultServlet;
 import org.mortbay.resource.Resource;
+import org.mortbay.resource.URLResource;
 
 /**
  * Customizes the Jetty default servlet.
@@ -51,7 +58,23 @@
                 pathInContext = "";
             }
         }
-        return super.getResource(pathInContext);
+        
+        try {
+            URL url = new URL(documentRoot + "/" + pathInContext);
+            return new URLResource(url, url.openConnection()) {
+                private static final long serialVersionUID = 
8560952113883507717L;
+                
+                @Override
+                public File getFile() throws IOException {
+                    return null;
+                }
+                
+            };
+        } catch (MalformedURLException e) {
+            return null;
+        } catch (IOException e) {
+            return null;
+        }
     }
     
     @Override

Modified: 
incubator/tuscany/java/sca/modules/http-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatDefaultServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/http-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatDefaultServlet.java?rev=570884&r1=570883&r2=570884&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/http-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatDefaultServlet.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/http-tomcat/src/main/java/org/apache/tuscany/sca/http/tomcat/TomcatDefaultServlet.java
 Wed Aug 29 11:12:33 2007
@@ -19,9 +19,16 @@
 
 package org.apache.tuscany.sca.http.tomcat;
 
-import java.net.URI;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Hashtable;
 
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -29,6 +36,7 @@
 import org.apache.catalina.servlets.DefaultServlet;
 import org.apache.naming.resources.FileDirContext;
 import org.apache.naming.resources.ProxyDirContext;
+import org.apache.naming.resources.Resource;
 
 public class TomcatDefaultServlet extends DefaultServlet {
     private static final long serialVersionUID = -7503581551326796573L;
@@ -39,9 +47,30 @@
     public TomcatDefaultServlet(String servletPath, String documentRoot) {
         this.documentRoot = documentRoot;
         
-        FileDirContext dirContext = new FileDirContext();
-        URI uri = URI.create(this.documentRoot);
-        dirContext.setDocBase(uri.getPath());
+        DirContext dirContext = new FileDirContext() {
+            
+            @Override
+            public Attributes getAttributes(String name) throws 
NamingException {
+                return new BasicAttributes();
+            }
+            
+            @Override
+            public Object lookup(String name) throws NamingException {
+                
+                try {
+                    final URL url = new 
URL(TomcatDefaultServlet.this.documentRoot + name);
+                    return new Resource() {
+                        
+                        @Override
+                        public InputStream streamContent() throws IOException {
+                            return url.openStream();
+                        }
+                    };
+                } catch (MalformedURLException e) {
+                    throw new NamingException(e.toString());
+                }
+            }
+        };
         
         proxyDirContext = new ProxyDirContext(new Hashtable(), dirContext);
         resources = proxyDirContext;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to