You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2011/09/20 14:37:54 UTC
svn commit: r1173118 -
/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Author: jukka
Date: Tue Sep 20 12:37:54 2011
New Revision: 1173118
URL: http://svn.apache.org/viewvc?rev=1173118&view=rev
Log:
JCR-3076: Mandatory authentication prevents webdav client connections
Return an empty set of descriptors when the descriptor report method requires authentication.
Modified:
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=1173118&r1=1173117&r2=1173118&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Tue Sep 20 12:37:54 2011
@@ -64,6 +64,7 @@ import org.apache.commons.httpclient.Hos
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.URIException;
@@ -239,7 +240,9 @@ public class RepositoryServiceImpl imple
private final Map<Name, QNodeTypeDefinition> nodeTypeDefinitions = new HashMap<Name, QNodeTypeDefinition>();
- private Map<String, QValue[]> descriptors;
+ /** Repository descriptors. */
+ private final Map<String, QValue[]> descriptors =
+ new HashMap<String, QValue[]>();
/**
* Same as {@link #RepositoryServiceImpl(String, IdFactory, NameFactory, PathFactory, QValueFactory, int, int)}
@@ -611,16 +614,25 @@ public class RepositoryServiceImpl imple
* @see RepositoryService#getRepositoryDescriptors()
*/
public Map<String, QValue[]> getRepositoryDescriptors() throws RepositoryException {
- if (descriptors == null) {
+ if (descriptors.isEmpty()) {
ReportInfo info = new ReportInfo(JcrRemotingConstants.REPORT_REPOSITORY_DESCRIPTORS, ItemResourceConstants.NAMESPACE);
ReportMethod method = null;
try {
method = new ReportMethod(uriResolver.getRepositoryUri(), info);
- getClient(null).executeMethod(method);
+ int sc = getClient(null).executeMethod(method);
+ if (sc == HttpStatus.SC_UNAUTHORIZED
+ || sc == HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED) {
+ // JCR-3076: Mandatory authentication prevents us from
+ // accessing the descriptors on the server, so instead
+ // of failing with an exception we simply return an empty
+ // set of descriptors
+ log.warn("Authentication required to access repository descriptors");
+ return descriptors;
+ }
+
method.checkSuccess();
Document doc = method.getResponseBodyAsDocument();
- descriptors = new HashMap<String, QValue[]>();
if (doc != null) {
Element rootElement = doc.getDocumentElement();
ElementIterator nsElems = DomUtil.getChildren(rootElement, JcrRemotingConstants.XML_DESCRIPTOR, ItemResourceConstants.NAMESPACE);