You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2013/07/23 13:51:36 UTC

svn commit: r1505994 - in /jackrabbit/branches/2.4: ./ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java

Author: reschke
Date: Tue Jul 23 11:51:36 2013
New Revision: 1505994

URL: http://svn.apache.org/r1505994
Log:
JCR-3228: WebDav/DavEx remoting throws workspace mismatch exceptions when running on port 80 (ported to 2.4)

Modified:
    jackrabbit/branches/2.4/   (props changed)
    jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
    jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java

Propchange: jackrabbit/branches/2.4/
------------------------------------------------------------------------------
  Merged /jackrabbit/trunk:r1505942

Modified: jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=1505994&r1=1505993&r2=1505994&view=diff
==============================================================================
--- jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Tue Jul 23 11:51:36 2013
@@ -324,7 +324,7 @@ public class RepositoryServiceImpl imple
         this.itemInfoCacheSize = itemInfoCacheSize;
 
         try {
-            URI repositoryUri = new URI((uri.endsWith("/")) ? uri : uri+"/", true);
+            URI repositoryUri = computeRepositoryUri(uri);
             hostConfig = new HostConfiguration();
             hostConfig.setHost(repositoryUri);
 
@@ -2658,6 +2658,26 @@ public class RepositoryServiceImpl imple
     }
 
     /**
+     * Compute the repository URI (while dealing with trailing / and port number
+     * defaulting)
+     */
+    public static URI computeRepositoryUri(String uri) throws URIException {
+        URI repositoryUri = new URI((uri.endsWith("/")) ? uri : uri + "/", true);
+        // workaround for JCR-3228: normalize default port numbers because of
+        // the weak URI matching code elsewhere (the remote server is unlikely
+        // to include the port number in URIs when it's the default for the
+        // protocol)
+        boolean useDefaultPort = ("http".equalsIgnoreCase(repositoryUri.getScheme()) && repositoryUri.getPort() == 80)
+                || (("https".equalsIgnoreCase(repositoryUri.getScheme()) && repositoryUri.getPort() == 443));
+        if (useDefaultPort) {
+            repositoryUri = new URI(repositoryUri.getScheme(), repositoryUri.getUserinfo(), repositoryUri.getHost(), -1,
+                    repositoryUri.getPath(), repositoryUri.getQuery(), repositoryUri.getFragment());
+        }
+
+        return repositoryUri;
+    }
+
+    /**
      *
      * @param sessionInfo
      * @param reportDoc

Modified: jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java?rev=1505994&r1=1505993&r2=1505994&view=diff
==============================================================================
--- jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java (original)
+++ jackrabbit/branches/2.4/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java Tue Jul 23 11:51:36 2013
@@ -31,6 +31,8 @@ import javax.jcr.RepositoryException;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.URI;
+import org.apache.commons.httpclient.URIException;
 import org.apache.commons.httpclient.methods.RequestEntity;
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
@@ -190,7 +192,13 @@ public class RepositoryServiceImpl exten
         super(jcrServerURI, IdFactoryImpl.getInstance(), NameFactoryImpl.getInstance(),
                 PathFactoryImpl.getInstance(), new QValueFactoryImpl(), itemInfoCacheSize, maximumHttpConnections);
 
-        this.jcrServerURI = jcrServerURI.endsWith("/") ? jcrServerURI : jcrServerURI + "/";
+        try {
+            URI repositoryUri = computeRepositoryUri(jcrServerURI);
+            this.jcrServerURI = repositoryUri.toString();
+        } catch (URIException e) {
+            throw new RepositoryException(e);
+        }
+
         this.defaultWorkspaceName = defaultWorkspaceName;
         if (batchReadConfig == null) {
             this.batchReadConfig = new BatchReadConfig() {