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/04/22 18:09:41 UTC
svn commit: r1470604 - in /jackrabbit/branches/2.4: ./
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Author: reschke
Date: Mon Apr 22 16:09:40 2013
New Revision: 1470604
URL: http://svn.apache.org/r1470604
Log:
JCR-3578: use absolute paths in DeltaV request bodies, and resolve hrefs in responses properly (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
Propchange: jackrabbit/branches/2.4/
------------------------------------------------------------------------------
Merged /jackrabbit/trunk:r1470573
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=1470604&r1=1470603&r2=1470604&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 Mon Apr 22 16:09:40 2013
@@ -1786,8 +1786,9 @@ public class RepositoryServiceImpl imple
private void update(String uri, Path relPath, String[] updateSource, int updateType, boolean removeExisting, SessionInfo sessionInfo) throws RepositoryException {
try {
UpdateInfo uInfo;
+ String tmpUpdateSource[] = obtainAbsolutePathsFromUris(updateSource);
if (removeExisting || relPath != null) {
- Element uElem = UpdateInfo.createUpdateElement(updateSource, updateType, DomUtil.createDocument());
+ Element uElem = UpdateInfo.createUpdateElement(tmpUpdateSource, updateType, DomUtil.createDocument());
if (removeExisting) {
DomUtil.addChildElement(uElem, JcrRemotingConstants.XML_REMOVEEXISTING, ItemResourceConstants.NAMESPACE);
}
@@ -1797,10 +1798,6 @@ public class RepositoryServiceImpl imple
uInfo = new UpdateInfo(uElem);
} else {
- String tmpUpdateSource[] = new String[updateSource.length];
- for (int i = 0; i < updateSource.length; i++) {
- tmpUpdateSource[i] = obtainAbsolutePathFromUri(updateSource[i]);
- }
uInfo = new UpdateInfo(tmpUpdateSource, updateType, new DavPropertyNameSet());
}
@@ -1828,20 +1825,21 @@ public class RepositoryServiceImpl imple
public Iterator<NodeId> merge(SessionInfo sessionInfo, NodeId nodeId, String srcWorkspaceName, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
try {
Document doc = DomUtil.createDocument();
- String wspHref = uriResolver.getWorkspaceUri(srcWorkspaceName);
- Element mElem = MergeInfo.createMergeElement(new String[] {wspHref}, !bestEffort, false, doc);
+ String wspHref = obtainAbsolutePathFromUri(uriResolver.getWorkspaceUri(srcWorkspaceName));
+ Element mElem = MergeInfo.createMergeElement(new String[] { wspHref }, !bestEffort, false, doc);
if (isShallow) {
mElem.appendChild(DomUtil.depthToXml(false, doc));
}
MergeInfo mInfo = new MergeInfo(mElem);
- MergeMethod method = new MergeMethod(getItemUri(nodeId, sessionInfo), mInfo);
+ String uri = getItemUri(nodeId, sessionInfo);
+ MergeMethod method = new MergeMethod(uri, mInfo);
execute(method, sessionInfo);
MultiStatusResponse[] resps = method.getResponseBodyAsMultiStatus().getResponses();
List<NodeId> failedIds = new ArrayList<NodeId>(resps.length);
for (MultiStatusResponse resp : resps) {
- String href = resp.getHref();
+ String href = resolve(uri, resp.getHref());
failedIds.add(uriResolver.getNodeId(href, sessionInfo));
}
return failedIds.iterator();
@@ -2834,7 +2832,20 @@ public class RepositoryServiceImpl imple
return uri;
}
}
-
+
+ private static String[] obtainAbsolutePathsFromUris(String[] uris) {
+ if (uris == null) {
+ return null;
+ } else {
+ String result[] = new String[uris.length];
+
+ for (int i = 0; i < result.length; i++) {
+ result[i] = obtainAbsolutePathFromUri(uris[i]);
+ }
+ return result;
+ }
+ }
+
/**
* The XML elements and attributes used in serialization
*/