From 47966699088f615c49bb4abbebfca2b2570524c1 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 25 Nov 2009 16:03:08 +0000 Subject: [PATCH] First (more or less) working webdav server git-svn-id: https://svn.argeo.org/commons/trunk@3166 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../argeo/sandbox/jackrabbit}/WebDavTest.java | 29 ++++++++++++++--- .../src/main/resources/log4j.properties | 2 ++ .../log4j.properties | 2 +- .../WEB-INF/web.xml | 14 ++++++--- .../org.argeo.server.jackrabbit/pom.xml | 5 +++ .../webdav/ExtendedDispatcherServlet.java | 31 +++++++++++++++++++ .../webdav/SimpleWebDavServlet.java | 29 ++++++++++++++++- .../jackrabbit/webdav/WebDavController.java | 10 ++++++ 8 files changed, 110 insertions(+), 12 deletions(-) rename sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/{webdav => org/argeo/sandbox/jackrabbit}/WebDavTest.java (69%) create mode 100644 server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java create mode 100644 server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavController.java 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/org/argeo/sandbox/jackrabbit/WebDavTest.java similarity index 69% rename from sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java rename to sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java index 5b938be0d..f121e928e 100644 --- a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java @@ -1,4 +1,4 @@ -package webdav; +package org.argeo.sandbox.jackrabbit; import java.io.FileInputStream; @@ -9,12 +9,15 @@ 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 { @@ -40,21 +43,37 @@ public class WebDavTest { // 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 - PutMethod pm = new PutMethod(baseUrl + fileName); + 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); + // CheckoutMethod gm = new CheckoutMethod(baseUrl + fileName); + log.debug("Retrieve " + url2); + GetMethod gm = new GetMethod(url2); client.executeMethod(gm); String responseGet = gm.getResponseBodyAsString(); - log.debug("CHECKOUT: " + responseGet); + 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/resources/log4j.properties b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties index defd189bf..c2edab75e 100644 --- a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties @@ -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. diff --git a/server/demo/org.argeo.server.demo.log4j/log4j.properties b/server/demo/org.argeo.server.demo.log4j/log4j.properties index db64b5579..659533cdc 100644 --- a/server/demo/org.argeo.server.demo.log4j/log4j.properties +++ b/server/demo/org.argeo.server.demo.log4j/log4j.properties @@ -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 diff --git a/server/modules/org.argeo.server.jackrabbit.webapp/WEB-INF/web.xml b/server/modules/org.argeo.server.jackrabbit.webapp/WEB-INF/web.xml index ab22d2cc4..bcc8a1ecd 100644 --- a/server/modules/org.argeo.server.jackrabbit.webapp/WEB-INF/web.xml +++ b/server/modules/org.argeo.server.jackrabbit.webapp/WEB-INF/web.xml @@ -23,17 +23,21 @@ webdav - org.springframework.web.servlet.DispatcherServlet + org.argeo.server.jackrabbit.webdav.ExtendedDispatcherServlet contextClass org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext + + dispatchOptionsRequest + true + 1 - - webdav - /default/* - + + webdav + /default/* + diff --git a/server/runtime/org.argeo.server.jackrabbit/pom.xml b/server/runtime/org.argeo.server.jackrabbit/pom.xml index 0db75b520..d48451e01 100644 --- a/server/runtime/org.argeo.server.jackrabbit/pom.xml +++ b/server/runtime/org.argeo.server.jackrabbit/pom.xml @@ -66,6 +66,11 @@ org.springframework.beans + + org.springframework + org.springframework.web.servlet + + org.slf4j 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 index 000000000..2fde82d03 --- /dev/null +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/ExtendedDispatcherServlet.java @@ -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); + } + } + +} diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java index 6d90455be..267758958 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/SimpleWebDavServlet.java @@ -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 index 000000000..ec611c54d --- /dev/null +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/webdav/WebDavController.java @@ -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; + + +} -- 2.30.2