Author: rgoers
Date: Tue Nov 2 14:03:42 2010
New Revision: 1030046
URL: http://svn.apache.org/viewvc?rev=1030046&view=rev
Log:
Fix VFS-315 and VFS-316. NullPointerExceptions in WebdavFileObject and adding
preemptive authentication
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystemConfigBuilder.java
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java
commons/proper/vfs/trunk/src/changes/changes.xml
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
URL:
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java?rev=1030046&r1=1030045&r2=1030046&view=diff
==============================================================================
---
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
(original)
+++
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpClientFactory.java
Tue Nov 2 14:03:42 2010
@@ -23,6 +23,7 @@ import org.apache.commons.httpclient.Use
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
+import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
@@ -109,6 +110,12 @@ public final class HttpClientFactory
client.getState().setProxyCredentials(null, proxyHost,
proxyCreds);
}
+
+ if (builder.isPreemptiveAuth(fileSystemOptions)) {
+ HttpClientParams httpClientParams = new
HttpClientParams();
+ httpClientParams.setAuthenticationPreemptive(true);
+ client.setParams(httpClientParams);
+ }
}
Cookie[] cookies = builder.getCookies(fileSystemOptions);
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystemConfigBuilder.java
URL:
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystemConfigBuilder.java?rev=1030046&r1=1030045&r2=1030046&view=diff
==============================================================================
---
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystemConfigBuilder.java
(original)
+++
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/http/HttpFileSystemConfigBuilder.java
Tue Nov 2 14:03:42 2010
@@ -35,8 +35,10 @@ public class HttpFileSystemConfigBuilder
private static final int DEFAULT_MAX_HOST_CONNECTIONS = 5;
private static final int DEFAULT_MAX_CONNECTIONS = 50;
-
- protected HttpFileSystemConfigBuilder(String prefix)
+
+ private static final String OPTION_NAME__PREEMPTIVE_AUTHENTICATION =
"preemptiveAuth";
+
+ protected HttpFileSystemConfigBuilder(String prefix)
{
super(prefix);
}
@@ -205,7 +207,30 @@ public class HttpFileSystemConfigBuilder
return getInteger(opts,
HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, DEFAULT_MAX_HOST_CONNECTIONS);
}
- protected Class getConfigClass()
+ /**
+ * Determines if the FileSystemOptions indicate that preemptive
+ * authentication is requested.
+ * @param opts The FileSystemOptions.
+ * @return true if preemptiveAuth is requested.
+ */
+ public boolean isPreemptiveAuth(FileSystemOptions opts) {
+ return getBoolean(opts, OPTION_NAME__PREEMPTIVE_AUTHENTICATION,
Boolean.FALSE).booleanValue();
+ }
+
+ /**
+ * Sets the given value for preemptive HTTP authentication (using BASIC)
on the
+ * given FileSystemOptions object. Defaults to false if not set. It may
be
+ * appropriate to set to true in cases when the resulting chattiness of
the
+ * conversation outweighs any architectural desire to use a stronger
authentication
+ * scheme than basic/preemptive.
+ * @param opts The FileSystemOptions.
+ * @param preemptiveAuth the desired setting; true=enabled and
false=disabled.
+ */
+ public void setPreemptiveAuth(FileSystemOptions opts, boolean
preemptiveAuth) {
+ setParam(opts, OPTION_NAME__PREEMPTIVE_AUTHENTICATION,
Boolean.valueOf(preemptiveAuth));
+ }
+
+ protected Class getConfigClass()
{
return HttpFileSystem.class;
}
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java
URL:
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java?rev=1030046&r1=1030045&r2=1030046&view=diff
==============================================================================
---
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java
(original)
+++
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java
Tue Nov 2 14:03:42 2010
@@ -296,7 +296,15 @@ public class WebdavFileObject extends Ht
if (!attributes.containsKey(property.getName()))
{
property = getProperty(fileName, property.getName());
- attributes.put(property.getName().toString(),
property.getValue());
+ if (property != null)
+ {
+ Object name = property.getName();
+ Object value = property.getValue();
+ if (name != null && value != null)
+ {
+ attributes.put(name.toString(), value);
+ }
+ }
}
}
return attributes;
Modified:
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java
URL:
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java?rev=1030046&r1=1030045&r2=1030046&view=diff
==============================================================================
---
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java
(original)
+++
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java
Tue Nov 2 14:03:42 2010
@@ -72,8 +72,12 @@ public class WebdavFileProvider
setFileNameParser(WebdavFileNameParser.getInstance());
}
- /**
- * Creates a {...@link FileSystem}.
+ /**
+ * Creates a {...@link FileSystem}. If you're looking at this method and
wondering how to
+ * get a FileSystemOptions object bearing the proxy host and credentials
configuration through
+ * to this method so it's used for resolving a {...@link FileObject} in
the FileSystem, then be sure
+ * to use correct signature of the {...@link FileSystemManager}
resolveFile method.
+ * @see
org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(FileObject,
String, FileSystemOptions).
*/
protected FileSystem doCreateFileSystem(final FileName name, final
FileSystemOptions fileSystemOptions)
throws FileSystemException
Modified: commons/proper/vfs/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1030046&r1=1030045&r2=1030046&view=diff
==============================================================================
--- commons/proper/vfs/trunk/src/changes/changes.xml (original)
+++ commons/proper/vfs/trunk/src/changes/changes.xml Tue Nov 2 14:03:42 2010
@@ -23,6 +23,12 @@
<body>
<release version="2.0" date="in SVN" description="">
+ <action dev="rgoers" type="fix" issue="VFS-315" due-to="David
Hausladen">
+ Fix potential NullPointerException if the DavProperty is null or
contains null values.
+ </action>
+ <action dev="rgoers" type="fix" issue="VFS-316" due-to="David
Hausladen">
+ Add option for preemptive authentication for HTTP based protocols.
+ </action>
<action dev="rgoers" type="fix" issue="VFS-322" due-to="Curtis Boyden">
Allow tar files that contain files over 2GB in size.
</action>