X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jcr.mvc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fmvc%2FMultipleRepositoryHandlerMapping.java;h=fb3f1ae65fe8c7aa455dd432a07b7eaccedaf630;hb=3a3d316af102ba410d1d9e6de349d0c8f7ac044f;hp=5c6e258e1b80b3f2d70245fa6caa00e52f335096;hpb=ef586999841732468a39a18b8193d3be767ac7aa;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java index 5c6e258e1..fb3f1ae65 100644 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java +++ b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.argeo.jcr.mvc; import java.util.Enumeration; import java.util.Properties; +import java.util.StringTokenizer; import javax.jcr.Repository; import javax.jcr.RepositoryFactory; @@ -44,7 +45,7 @@ public abstract class MultipleRepositoryHandlerMapping implements private final static Log log = LogFactory .getLog(MultipleRepositoryHandlerMapping.class); - // private final static String MKCOL = "MKCOL"; + private final static String MKCOL = "MKCOL"; private ConfigurableApplicationContext applicationContext; private ServletContext servletContext; @@ -65,24 +66,24 @@ public abstract class MultipleRepositoryHandlerMapping implements } String pathInfo = request.getPathInfo(); - - // tokenize path - // List tokens = JcrUtils.tokenize(pathInfo); - // String[] tokens = extractPrefix(pathInfo); - - // check if repository can be found - // if (tokens[0] == null || (tokens[1] == null && tokens[0].equals(""))) - // return null; - - // MKCOL on repository or root node doesn't make sense - // if ((tokens.size() == 1 || tokens.size() == 2) - // && request.getMethod().equals(MKCOL)) - // return null; - - // String repositoryAlias = extractRepositoryName(tokens); String repositoryAlias = extractRepositoryAlias(pathInfo); if (repositoryAlias.equals("")) return null; + + // MKCOL on repository or root node doesn't make sense + // and causes issues + if (request.getMethod().equals(MKCOL)) { + StringTokenizer st = new StringTokenizer(pathInfo, "/"); + if (!st.hasMoreTokens()) + return null; + st.nextToken();// repository + if (!st.hasMoreTokens()) + return null; + st.nextToken();// workspace + if (!st.hasMoreTokens()) + return null; + } + request.setAttribute(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS, repositoryAlias); String pathPrefix = request.getServletPath() + '/' + repositoryAlias;