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/03/27 17:17:01 UTC
svn commit: r1461687 - in /jackrabbit/branches/2.6: ./
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
Author: reschke
Date: Wed Mar 27 16:17:01 2013
New Revision: 1461687
URL: http://svn.apache.org/r1461687
Log:
JCR-3549: URIResolverImpl needs to handle absolute paths in addition to absolute URIs (ported to 2.6)
Modified:
jackrabbit/branches/2.6/ (props changed)
jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java
jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
Propchange: jackrabbit/branches/2.6/
------------------------------------------------------------------------------
Merged /jackrabbit/trunk:r1461613
Modified: jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java?rev=1461687&r1=1461686&r2=1461687&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/IdURICache.java Wed Mar 27 16:17:01 2013
@@ -71,7 +71,7 @@ class IdURICache {
public void add(String uri, ItemId itemId) {
if (!uri.startsWith(workspaceUri)) {
- throw new IllegalArgumentException("Workspace missmatch.");
+ throw new IllegalArgumentException("Workspace mismatch: '" + uri + "' not under '" + workspaceUri + "'");
}
String cleanUri = getCleanUri(uri);
uriToIdCache.put(cleanUri, itemId);
Modified: jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java?rev=1461687&r1=1461686&r2=1461687&view=diff
==============================================================================
--- jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java (original)
+++ jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/URIResolverImpl.java Wed Mar 27 16:17:01 2013
@@ -45,6 +45,7 @@ import org.w3c.dom.Document;
import javax.jcr.ItemNotFoundException;
import javax.jcr.RepositoryException;
import java.io.IOException;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
@@ -125,8 +126,9 @@ class URIResolverImpl implements URIReso
MultiStatus ms = rm.getResponseBodyAsMultiStatus();
if (ms.getResponses().length == 1) {
- uriBuffer.append(ms.getResponses()[0].getHref());
- cache.add(ms.getResponses()[0].getHref(), uuidId);
+ String absoluteUri = resolve(wspUri, ms.getResponses()[0].getHref());
+ uriBuffer.append(absoluteUri);
+ cache.add(absoluteUri, uuidId);
} else {
throw new ItemNotFoundException("Cannot identify item with uniqueID " + uniqueID);
}
@@ -135,6 +137,8 @@ class URIResolverImpl implements URIReso
throw new RepositoryException(e.getMessage());
} catch (DavException e) {
throw ExceptionConverter.generate(e);
+ } catch (URISyntaxException e) {
+ throw new RepositoryException(e.getMessage());
} finally {
if (rm != null) {
rm.releaseConnection();
@@ -161,6 +165,15 @@ class URIResolverImpl implements URIReso
}
}
+ /**
+ * Resolve the given href obtained from multistatus against base URI
+ */
+ private static String resolve(String wspUri, String href) throws URISyntaxException {
+ java.net.URI base = new java.net.URI(wspUri);
+ java.net.URI rel = new java.net.URI(href);
+ return base.resolve(rel).toASCIIString();
+ }
+
NodeId buildNodeId(NodeId parentId, MultiStatusResponse response,
String workspaceName, NamePathResolver resolver) throws RepositoryException {
IdURICache cache = getCache(workspaceName);