Author: ecki Date: Fri Sep 18 15:35:40 2015 New Revision: 1703891 URL: http://svn.apache.org/viewvc?rev=1703891&view=rev Log: [VFS-198][http] Make user-agent configurable.
Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java commons/proper/vfs/trunk/src/changes/changes.xml Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java?rev=1703891&r1=1703890&r2=1703891&view=diff ============================================================================== --- commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java (original) +++ commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java Fri Sep 18 15:35:40 2015 @@ -73,6 +73,7 @@ public class HttpFileObject<FS extends H } } private final String urlCharset; + private final String userAgent; private final boolean followRedirect; private HeadMethod method; @@ -88,6 +89,7 @@ public class HttpFileObject<FS extends H super(name, fileSystem); final FileSystemOptions fileSystemOptions = fileSystem.getFileSystemOptions(); urlCharset = builder.getUrlCharset(fileSystemOptions); + userAgent = builder.getUserAgent(fileSystemOptions); followRedirect = builder.getFollowRedirect(fileSystemOptions); } @@ -221,6 +223,11 @@ public class HttpFileObject<FS extends H return followRedirect; } + protected String getUserAgent() + { + return userAgent; + } + HeadMethod getHeadMethod() throws IOException { if (method != null) @@ -253,7 +260,7 @@ public class HttpFileObject<FS extends H final String pathEncoded = ((URLFileName) getName()).getPathQueryEncoded(this.getUrlCharset()); method.setPath(pathEncoded); method.setFollowRedirects(this.getFollowRedirect()); - method.setRequestHeader("User-Agent", "Jakarta-Commons-VFS"); + method.setRequestHeader("User-Agent", this.getUserAgent()); } /* Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java?rev=1703891&r1=1703890&r2=1703891&view=diff ============================================================================== --- commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java (original) +++ commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java Fri Sep 18 15:35:40 2015 @@ -30,6 +30,8 @@ public class HttpFileSystemConfigBuilder { protected static final String KEY_FOLLOW_REDIRECT = "followRedirect"; + protected static final String KEY_USER_AGENT = "userAgent"; + private static final HttpFileSystemConfigBuilder BUILDER = new HttpFileSystemConfigBuilder(); private static final int DEFAULT_MAX_HOST_CONNECTIONS = 5; @@ -42,6 +44,8 @@ public class HttpFileSystemConfigBuilder private static final boolean DEFAULT_FOLLOW_REDIRECT = true; + private static final String DEFAULT_USER_AGENT = "Jakarta-Commons-VFS"; + private static final String KEY_PREEMPTIVE_AUTHENTICATION = "preemptiveAuth"; /** @@ -330,6 +334,28 @@ public class HttpFileSystemConfigBuilder return getInteger(opts, HttpConnectionManagerParams.SO_TIMEOUT, DEFAULT_SO_TIMEOUT); } + /** + * Assign the user agent to attach to the outgoing http methods + * + * @param userAgent User Agent String + */ + public void setUserAgent(final FileSystemOptions opts, final String userAgent) + { + setParam(opts, "userAgent", userAgent); + } + + /** + * Return the user agent string + * + * @return User provided User-Agent string, otherwise default of: Jakarta-Commons-VFS + */ + public String getUserAgent(final FileSystemOptions opts) + { + final String userAgent = (String) getParam(opts, KEY_USER_AGENT); + return userAgent != null ? userAgent : DEFAULT_USER_AGENT; + } + + @Override protected Class<? extends FileSystem> getConfigClass() { Modified: commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java?rev=1703891&r1=1703890&r2=1703891&view=diff ============================================================================== --- commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java (original) +++ commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java Fri Sep 18 15:35:40 2015 @@ -217,13 +217,16 @@ public class HttpProviderTestCase extend // ensure defaults are 0 assertEquals(0, builder.getConnectionTimeout(opts)); assertEquals(0, builder.getSoTimeout(opts)); + assertEquals("Jakarta-Commons-VFS", builder.getUserAgent(opts)); builder.setConnectionTimeout(opts, 60000); builder.setSoTimeout(opts, 60000); + builder.setUserAgent(opts, "foo/bar"); // ensure changes are visible assertEquals(60000, builder.getConnectionTimeout(opts)); assertEquals(60000, builder.getSoTimeout(opts)); + assertEquals("foo/bar", builder.getUserAgent(opts)); // TODO: should also check the created HTTPClient } Modified: commons/proper/vfs/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1703891&r1=1703890&r2=1703891&view=diff ============================================================================== --- commons/proper/vfs/trunk/src/changes/changes.xml (original) +++ commons/proper/vfs/trunk/src/changes/changes.xml Fri Sep 18 15:35:40 2015 @@ -26,6 +26,9 @@ <!-- <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> --> <!-- [Local] Need an easy way to convert from a FileObject to a File. --> <!-- </action> --> + <action issue="VFS-198" dev="ecki" type="add" due-to="Andrew Franklin, Simon Legner"> + [http] Make user agent configurable. + </action> <action issue="VFS-202" dev="ecki" type="fix" due-to="Sergey Vladimirov, Simon Legner"> [http] Allow URLs responding with 405 to HEAD requests. </action>