You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2008/09/25 08:51:17 UTC
svn commit: r698837 - in /jackrabbit/branches/1.4/jackrabbit-jcr-server/src:
main/java/org/apache/jackrabbit/webdav/jcr/
main/java/org/apache/jackrabbit/webdav/jcr/search/
main/java/org/apache/jackrabbit/webdav/simple/ test/ test/java/
test/java/org/ t...
Author: angela
Date: Wed Sep 24 23:51:16 2008
New Revision: 698837
URL: http://svn.apache.org/viewvc?rev=698837&view=rev
Log:
prepare release for jackrabbit-jcr-server_1.4.1
merge fixes from trunk for
[JCR-1300] Improve performance for large binary properties
[JCR-1319] NullPointerException when accessing the SimpleWebdav ...
[JCR-1345] ClassCastException when updating properties using WebDAV
[JCR-1392] Exception not thrown where it appears it should have been
[JCR-1401] Removing-nodes with unexpected nodetype
[JCR-1679] Dir with same name as repository has incorrect behavior
[JCR-1678] NullPointerException in constructor of JcrDavException
Added:
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java
- copied unchanged from r687316, jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/jcr/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/jcr/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/jcr/JcrDavExceptionTest.java
- copied unchanged from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/jcr/JcrDavExceptionTest.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/
- copied from r677895, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplExTest.java
- copied unchanged from r677895, jackrabbit/trunk/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplExTest.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/resources/
- copied from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/test/resources/log4j.properties
- copied unchanged from r677893, jackrabbit/trunk/jackrabbit-jcr-server/src/test/resources/log4j.properties
Modified:
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplEx.java
jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java Wed Sep 24 23:51:16 2008
@@ -81,6 +81,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
@@ -403,8 +405,28 @@
if (in == null) {
// PUT: not possible without request body
throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Cannot create a new non-collection resource without request body.");
+ }
+ // PUT : create new or overwrite existing property.
+ String ct = inputContext.getContentType();
+ int type = JcrValueType.typeFromContentType(ct);
+ if (type != PropertyType.UNDEFINED) {
+ // no need to create value/values property. instead
+ // prop-value can be retrieved directly:
+ int pos = ct.indexOf(';');
+ String charSet = (pos > -1) ? ct.substring(pos) : "UTF-8";
+ if (type == PropertyType.BINARY) {
+ n.setProperty(memberName, inputContext.getInputStream());
+ } else {
+ BufferedReader r = new BufferedReader(new InputStreamReader(inputContext.getInputStream(), charSet));
+ String line;
+ StringBuffer value = new StringBuffer();
+ while ((line = r.readLine()) != null) {
+ value.append(line);
+ }
+ n.setProperty(memberName, value.toString(), type);
+ }
} else {
- // PUT : create new or overwrite existing property.
+ // try to parse the request body into a 'values' property.
tmpFile = File.createTempFile(TMP_PREFIX + Text.escape(memberName), null, null);
FileOutputStream out = new FileOutputStream(tmpFile);
IOUtil.spool(in, out);
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java Wed Sep 24 23:51:16 2008
@@ -302,14 +302,14 @@
// set the content type
String contentType;
- if (!isMultiple()) {
- contentType = (type == PropertyType.BINARY) ? "application/octet-stream" : "text/plain";
+ if (isMultiple()) {
+ contentType = IOUtil.buildContentType("text/xml","utf-8");
} else {
- contentType = "text/xml";
+ contentType = IOUtil.buildContentType(JcrValueType.contentTypeFromType(type), "utf-8");
+
}
properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTTYPE, contentType));
-
// add jcr-specific resource properties
properties.add(new DefaultDavProperty(JCR_TYPE, PropertyType.nameFromValue(type)));
if (isMultiple()) {
@@ -319,9 +319,6 @@
properties.add(new ValuesProperty(prop.getValue()));
long length = prop.getLength();
properties.add(new DefaultDavProperty(JCR_LENGTH, String.valueOf(length), true));
- if (prop.getLength() > IOUtil.UNDEFINED_LENGTH) {
- properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, String.valueOf(length)));
- }
}
} catch (RepositoryException e) {
log.error("Failed to retrieve resource properties: "+e.getMessage());
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java Wed Sep 24 23:51:16 2008
@@ -44,7 +44,10 @@
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.version.VersionException;
-import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.LinkedHashMap;
+
/**
* <code>JcrDavException</code> extends the {@link DavException} in order to
@@ -54,8 +57,8 @@
private static Logger log = LoggerFactory.getLogger(JcrDavException.class);
- // mapping of Jcr exceptions to error codes.
- private static HashMap codeMap = new HashMap();
+ // ordered mapping of Jcr exceptions to error codes.
+ private static Map codeMap = new LinkedHashMap(20);
static {
codeMap.put(AccessDeniedException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
codeMap.put(ConstraintViolationException.class, new Integer(DavServletResponse.SC_CONFLICT));
@@ -71,13 +74,30 @@
codeMap.put(NoSuchWorkspaceException.class, new Integer(DavServletResponse.SC_CONFLICT));
codeMap.put(PathNotFoundException.class, new Integer(DavServletResponse.SC_CONFLICT));
codeMap.put(ReferentialIntegrityException.class, new Integer(DavServletResponse.SC_CONFLICT));
- codeMap.put(RepositoryException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
codeMap.put(LoginException.class, new Integer(DavServletResponse.SC_UNAUTHORIZED));
codeMap.put(UnsupportedRepositoryOperationException.class, new Integer(DavServletResponse.SC_NOT_IMPLEMENTED));
codeMap.put(ValueFormatException.class, new Integer(DavServletResponse.SC_CONFLICT));
codeMap.put(VersionException.class, new Integer(DavServletResponse.SC_CONFLICT));
+ codeMap.put(RepositoryException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
}
+ private static int lookupErrorCode(Class exceptionClass) {
+ Integer code = (Integer) codeMap.get(exceptionClass);
+ if (code == null) {
+ for (Iterator it = codeMap.keySet().iterator(); it.hasNext();) {
+ Class jcrExceptionClass = (Class) it.next();
+ if (jcrExceptionClass.isAssignableFrom(exceptionClass)) {
+ code = (Integer) codeMap.get(jcrExceptionClass);
+ break;
+ }
+ }
+ if (code == null) {
+ code = new Integer(DavServletResponse.SC_FORBIDDEN); // fallback
+ }
+ }
+ return code.intValue();
+ }
+
private Class exceptionClass;
/**
@@ -108,7 +128,7 @@
* @see JcrDavException#JcrDavException(Throwable, int)
*/
public JcrDavException(RepositoryException cause) {
- this(cause, ((Integer)codeMap.get(cause.getClass())).intValue());
+ this(cause, lookupErrorCode(cause.getClass()));
}
/**
@@ -136,4 +156,4 @@
error.appendChild(excep);
return error;
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java Wed Sep 24 23:51:16 2008
@@ -93,7 +93,7 @@
} else if (propValue instanceof Element) {
parseColumnElement((Element)property.getValue(), colList, valList, valueFactory);
} else {
- new IllegalArgumentException("SearchResultProperty requires a list of 'dcr:column' xml elements.");
+ throw new IllegalArgumentException("SearchResultProperty requires a list of 'dcr:column' xml elements.");
}
columnNames = (String[]) colList.toArray(new String[colList.size()]);
@@ -209,4 +209,4 @@
}
return elem;
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplEx.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplEx.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplEx.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImplEx.java Wed Sep 24 23:51:16 2008
@@ -62,7 +62,7 @@
if (repositoryPath == null) {
throw new IllegalArgumentException("Cannot build resource path from 'null' repository path");
}
- return (startsWithWorkspace(repositoryPath, wspPath)) ? repositoryPath : wspPath + repositoryPath;
+ return wspPath + repositoryPath;
}
private boolean startsWithWorkspace(String repositoryPath, String wspPath) {
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java?rev=698837&r1=698836&r2=698837&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java Wed Sep 24 23:51:16 2008
@@ -137,13 +137,16 @@
throws RepositoryException {
Node node = null;
try {
- Item item = ((JcrDavSession)sessionImpl).getRepositorySession().getItem(locator.getRepositoryPath());
- if (item instanceof Node) {
- node = (Node)item;
- } // else: item is a property -> return null
+ String repoPath = locator.getRepositoryPath();
+ if (repoPath != null) {
+ Session session = ((JcrDavSession)sessionImpl).getRepositorySession();
+ Item item = session.getItem(repoPath);
+ if (item instanceof Node) {
+ node = (Node)item;
+ } // else: item is a property -> return null
+ }
} catch (PathNotFoundException e) {
- // item does not exist (yet) -> create null-resource
- node = null;
+ // item does not exist (yet). return null -> create null-resource
}
return node;
}
@@ -153,7 +156,7 @@
*
* @param locator
* @param session
- * @param request
+ * @param isCollection
* @return
* @throws DavException
*/
@@ -178,10 +181,11 @@
* supports the versioning option different resources are created for
* version, versionhistory and common nodes.
*
+ * @param node
* @param locator
- * @param sessionImpl
- * @return DavResource representing a repository item.
- * @throws RepositoryException if {@link javax.jcr.Session#getItem(String)} fails.
+ * @param session
+ * @return
+ * @throws DavException
*/
private DavResource createResource(Node node, DavResourceLocator locator,
DavSession session) throws DavException {