From: Mathieu Baudier Date: Wed, 25 Nov 2009 16:03:08 +0000 (+0000) Subject: First (more or less) working webdav server X-Git-Tag: argeo-commons-2.1.30~1689 X-Git-Url: http://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=47966699088f615c49bb4abbebfca2b2570524c1 First (more or less) working webdav server git-svn-id: https://svn.argeo.org/commons/trunk@3166 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 index 000000000..f121e928e --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/org/argeo/sandbox/jackrabbit/WebDavTest.java @@ -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 index 5b938be0d..000000000 --- a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java +++ /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(); - } - } - -} 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; + + +}