First (more or less) working webdav server
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 25 Nov 2009 16:03:08 +0000 (16:03 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 25 Nov 2009 16:03:08 +0000 (16:03 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3166 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java [new file with mode: 0644]
sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java [deleted file]
sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties
server/demo/org.argeo.server.demo.log4j/log4j.properties
server/modules/org.argeo.server.jackrabbit.webapp/WEB-INF/web.xml
server/runtime/org.argeo.server.jackrabbit/pom.xml
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java [new file with mode: 0644]
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavController.java [new file with mode: 0644]

diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java
new file mode 100644 (file)
index 0000000..f121e92
--- /dev/null
@@ -0,0 +1,82 @@
+package org.argeo.sandbox.jackrabbit;
+
+import java.io.FileInputStream;
+
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HostConfiguration;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpConnectionManager;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+import org.apache.commons.httpclient.methods.RequestEntity;
+import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.webdav.client.methods.CheckoutMethod;
+import org.apache.jackrabbit.webdav.client.methods.CopyMethod;
+import org.apache.jackrabbit.webdav.client.methods.DavMethod;
+import org.apache.jackrabbit.webdav.client.methods.PutMethod;
+
+public class WebDavTest {
+       private final static Log log = LogFactory.getLog(WebDavTest.class);
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               try {
+                       HostConfiguration hostConfig = new HostConfiguration();
+                       hostConfig.setHost("localhost", 7070);
+                       // hostConfig.
+                       HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
+                       HttpConnectionManagerParams params = new HttpConnectionManagerParams();
+                       int maxHostConnections = 20;
+                       params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);
+                       connectionManager.setParams(params);
+                       HttpClient client = new HttpClient(connectionManager);
+                       Credentials creds = new UsernamePasswordCredentials("demo", "demo");
+                       client.getState().setCredentials(AuthScope.ANY, creds);
+                       client.setHostConfiguration(hostConfig);
+                       // return client;
+
+                       String baseUrl = "http://localhost:7070/org.argeo.server.jackrabbit.webapp/default/";
+                       String fileName = "test.xml";
+                       String url1 = baseUrl + fileName;
+                       String url2 = baseUrl + "test-copied.xml";
+
+                       // PUT
+                       log.debug("Create " + url1);
+                       PutMethod pm = new PutMethod(url1);
+                       RequestEntity requestEntity = new InputStreamRequestEntity(
+                                       new FileInputStream(fileName));
+                       pm.setRequestEntity(requestEntity);
+                       client.executeMethod(pm);
+                       log.debug("POST status: " + pm.getStatusCode() + " "
+                                       + pm.getStatusText());
+
+                       // COPY
+                       log.debug("Copy to " + url2);
+                       DavMethod copy = new CopyMethod(url1, url2, true);
+                       client.executeMethod(copy);
+
+                       log.debug("COPY status: " + copy.getStatusCode() + " "
+                                       + copy.getStatusText());
+
+                       // GET
+                       // CheckoutMethod gm = new CheckoutMethod(baseUrl + fileName);
+                       log.debug("Retrieve " + url2);
+                       GetMethod gm = new GetMethod(url2);
+                       client.executeMethod(gm);
+                       String responseGet = gm.getResponseBodyAsString();
+                       log.debug("GET status: " + gm.getStatusCode() + " "
+                                       + gm.getStatusText());
+                       // log.debug("GET: " + responseGet);
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+
+}
diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java
deleted file mode 100644 (file)
index 5b938be..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-package webdav;
-
-import java.io.FileInputStream;
-
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.HostConfiguration;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpConnectionManager;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
-import org.apache.commons.httpclient.methods.RequestEntity;
-import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.webdav.client.methods.CheckoutMethod;
-import org.apache.jackrabbit.webdav.client.methods.PutMethod;
-
-public class WebDavTest {
-       private final static Log log = LogFactory.getLog(WebDavTest.class);
-
-       /**
-        * @param args
-        */
-       public static void main(String[] args) {
-               try {
-                       HostConfiguration hostConfig = new HostConfiguration();
-                       hostConfig.setHost("localhost", 7070);
-                       // hostConfig.
-                       HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
-                       HttpConnectionManagerParams params = new HttpConnectionManagerParams();
-                       int maxHostConnections = 20;
-                       params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);
-                       connectionManager.setParams(params);
-                       HttpClient client = new HttpClient(connectionManager);
-                       Credentials creds = new UsernamePasswordCredentials("demo", "demo");
-                       client.getState().setCredentials(AuthScope.ANY, creds);
-                       client.setHostConfiguration(hostConfig);
-                       // return client;
-
-                       String baseUrl = "http://localhost:7070/org.argeo.server.jackrabbit.webapp/default/";
-
-                       String fileName = "test.xml";
-
-                       // PUT
-                       PutMethod pm = new PutMethod(baseUrl + fileName);
-                       RequestEntity requestEntity = new InputStreamRequestEntity(
-                                       new FileInputStream(fileName));
-                       pm.setRequestEntity(requestEntity);
-                       client.executeMethod(pm);
-
-                       // GET
-                       CheckoutMethod gm = new CheckoutMethod(baseUrl + fileName);
-                       client.executeMethod(gm);
-                       String responseGet = gm.getResponseBodyAsString();
-                       log.debug("CHECKOUT: " + responseGet);
-               } catch (Exception e) {
-                       e.printStackTrace();
-               }
-       }
-
-}
index defd189bf94f03daacd6c7adf4db62f6d8ac07e0..c2edab75e673271862f217035ea63d04a1983af7 100644 (file)
@@ -1,6 +1,8 @@
 # ***** Set root logger level to DEBUG and its only appender to A.
 log4j.rootLogger=WARN, A
 
+log4j.logger.org.argeo=DEBUG
+
 # ***** A is set to be a ConsoleAppender.
 log4j.appender.A=org.apache.log4j.ConsoleAppender
 # ***** A uses PatternLayout.
index db64b5579be54c782e08af655ea31353630bda4b..659533cdc08e72b243fc1f40be9d0d17023e9cb4 100644 (file)
@@ -6,7 +6,7 @@ log4j.logger.org.argeo=DEBUG
 log4j.logger.org.hibernate=WARN
 
 log4j.logger.org.springframework=WARN
-#log4j.logger.org.springframework.web=TRACE
+log4j.logger.org.springframework.web=TRACE
 #log4j.logger.org.springframework.jms=WARN
 #log4j.logger.org.springframework.security=WARN
 
index ab22d2cc4abf25ca79f6e1f572cb9bc59226c67c..bcc8a1ecdee189bedd08d9b05879989a1012ffbd 100644 (file)
        <!-- Simple Webdav -->
        <servlet>
                <servlet-name>webdav</servlet-name>
-               <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+               <servlet-class>org.argeo.server.jackrabbit.webdav.ExtendedDispatcherServlet</servlet-class>
                <init-param>
                        <param-name>contextClass</param-name>
                        <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
                </init-param>
+               <init-param>
+                       <param-name>dispatchOptionsRequest</param-name>
+                       <param-value>true</param-value>
+               </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>
 
-    <servlet-mapping>
-        <servlet-name>webdav</servlet-name>
-        <url-pattern>/default/*</url-pattern>
-    </servlet-mapping>
+       <servlet-mapping>
+               <servlet-name>webdav</servlet-name>
+               <url-pattern>/default/*</url-pattern>
+       </servlet-mapping>
 
 </web-app>
index 0db75b520825ca95ea8b1523ee38135709718ab0..d48451e01b3c31a9c40e02eedcd76c622bd7b5d0 100644 (file)
                        <artifactId>org.springframework.beans</artifactId>
                </dependency>
 
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>org.springframework.web.servlet</artifactId>
+               </dependency>
+
                <!-- Logging -->
                <dependency>
                        <groupId>org.slf4j</groupId>
diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java
new file mode 100644 (file)
index 0000000..2fde82d
--- /dev/null
@@ -0,0 +1,31 @@
+package org.argeo.server.jackrabbit.webdav;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.springframework.web.servlet.DispatcherServlet;
+
+public class ExtendedDispatcherServlet extends DispatcherServlet {
+       private static final long serialVersionUID = 1L;
+
+       private final static Log log = LogFactory
+                       .getLog(ExtendedDispatcherServlet.class);
+
+       protected void service(HttpServletRequest req, HttpServletResponse resp)
+                       throws ServletException, java.io.IOException {
+               // see http://forum.springsource.org/showthread.php?t=53472
+               try {
+                       if (log.isDebugEnabled())
+                               log.debug("Received request with method '" + req.getMethod()
+                                               + "'");
+                       doService(req, resp);
+               } catch (Exception e) {
+                       throw new ArgeoException("Cannot process request", e);
+               }
+       }
+
+}
index 6d90455be668c3939ce1d1602e1a836e3e4589bd..2677589583c51ec23710067a53aed3b39afe9a5a 100644 (file)
@@ -2,17 +2,27 @@ package org.argeo.server.jackrabbit.webdav;
 
 import java.io.IOException;
 
+import javax.jcr.Repository;
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.jackrabbit.webdav.simple.ResourceConfig;
 import org.argeo.ArgeoException;
 import org.springframework.core.io.Resource;
 
 public class SimpleWebDavServlet extends
-               org.apache.jackrabbit.j2ee.SimpleWebdavServlet {
+               org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet {
 
        private static final long serialVersionUID = 1L;
+       private final static Log log = LogFactory.getLog(SimpleWebDavServlet.class);
 
+       /**
+        * the jcr repository
+        */
+       private Repository repository;
        private Resource resourceConfiguration;
 
        @Override
@@ -31,6 +41,23 @@ public class SimpleWebDavServlet extends
                }
        }
 
+       @Override
+       protected void service(HttpServletRequest request,
+                       HttpServletResponse response) throws ServletException, IOException {
+               if (log.isDebugEnabled())
+                       log.debug("Received request with method '" + request.getMethod()
+                                       + "'");
+               super.service(request, response);
+       }
+
+       public Repository getRepository() {
+               return repository;
+       }
+
+       public void setRepository(Repository repository) {
+               this.repository = repository;
+       }
+
        public void setResourceConfiguration(Resource resourceConfig) {
                this.resourceConfiguration = resourceConfig;
        }
diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavController.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavController.java
new file mode 100644 (file)
index 0000000..ec611c5
--- /dev/null
@@ -0,0 +1,10 @@
+package org.argeo.server.jackrabbit.webdav;
+
+import org.springframework.core.io.Resource;
+import org.springframework.web.servlet.mvc.ServletWrappingController;
+
+public class WebDavController extends ServletWrappingController {
+       private Resource resourceConfiguration;
+
+       
+}