s3: fixed ssl error on bucket not found

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2609 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2010-01-06 03:43:25 +00:00
parent 1661ff18fd
commit aab7fd12dc
4 changed files with 30 additions and 5 deletions

View File

@ -48,6 +48,7 @@ import org.jclouds.aws.s3.filters.RequestAuthorizeSignature;
import org.jclouds.aws.s3.functions.ObjectKey; import org.jclouds.aws.s3.functions.ObjectKey;
import org.jclouds.aws.s3.functions.ParseObjectFromHeadersAndHttpContent; import org.jclouds.aws.s3.functions.ParseObjectFromHeadersAndHttpContent;
import org.jclouds.aws.s3.functions.ParseObjectMetadataFromHeaders; import org.jclouds.aws.s3.functions.ParseObjectMetadataFromHeaders;
import org.jclouds.aws.s3.functions.ReturnFalseOn404OrSSLHandshakeException;
import org.jclouds.aws.s3.functions.ReturnTrueIfBucketAlreadyOwnedByYou; import org.jclouds.aws.s3.functions.ReturnTrueIfBucketAlreadyOwnedByYou;
import org.jclouds.aws.s3.functions.ReturnTrueOn404FalseIfNotEmpty; import org.jclouds.aws.s3.functions.ReturnTrueOn404FalseIfNotEmpty;
import org.jclouds.aws.s3.options.CopyObjectOptions; import org.jclouds.aws.s3.options.CopyObjectOptions;
@ -68,7 +69,6 @@ import org.jclouds.blobstore.functions.ReturnVoidOnNotFoundOr404;
import org.jclouds.blobstore.functions.ThrowContainerNotFoundOn404; import org.jclouds.blobstore.functions.ThrowContainerNotFoundOn404;
import org.jclouds.blobstore.functions.ThrowKeyNotFoundOn404; import org.jclouds.blobstore.functions.ThrowKeyNotFoundOn404;
import org.jclouds.http.functions.ParseETagHeader; import org.jclouds.http.functions.ParseETagHeader;
import org.jclouds.http.functions.ReturnFalseOn404;
import org.jclouds.http.options.GetOptions; import org.jclouds.http.options.GetOptions;
import org.jclouds.rest.annotations.BinderParam; import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.Endpoint; import org.jclouds.rest.annotations.Endpoint;
@ -169,7 +169,7 @@ public interface S3AsyncClient {
@HEAD @HEAD
@Path("/") @Path("/")
@QueryParams(keys = "max-keys", values = "0") @QueryParams(keys = "max-keys", values = "0")
@ExceptionParser(ReturnFalseOn404.class) @ExceptionParser(ReturnFalseOn404OrSSLHandshakeException.class)
Future<Boolean> bucketExists(@HostPrefixParam String bucketName); Future<Boolean> bucketExists(@HostPrefixParam String bucketName);
/** /**

View File

@ -38,6 +38,7 @@ import org.jclouds.aws.s3.domain.AccessControlList.Permission;
import org.jclouds.aws.s3.filters.RequestAuthorizeSignature; import org.jclouds.aws.s3.filters.RequestAuthorizeSignature;
import org.jclouds.aws.s3.functions.ParseObjectFromHeadersAndHttpContent; import org.jclouds.aws.s3.functions.ParseObjectFromHeadersAndHttpContent;
import org.jclouds.aws.s3.functions.ParseObjectMetadataFromHeaders; import org.jclouds.aws.s3.functions.ParseObjectMetadataFromHeaders;
import org.jclouds.aws.s3.functions.ReturnFalseOn404OrSSLHandshakeException;
import org.jclouds.aws.s3.functions.ReturnTrueIfBucketAlreadyOwnedByYou; import org.jclouds.aws.s3.functions.ReturnTrueIfBucketAlreadyOwnedByYou;
import org.jclouds.aws.s3.functions.ReturnTrueOn404FalseIfNotEmpty; import org.jclouds.aws.s3.functions.ReturnTrueOn404FalseIfNotEmpty;
import org.jclouds.aws.s3.options.CopyObjectOptions; import org.jclouds.aws.s3.options.CopyObjectOptions;
@ -61,7 +62,6 @@ import org.jclouds.blobstore.reference.BlobStoreConstants;
import org.jclouds.date.TimeStamp; import org.jclouds.date.TimeStamp;
import org.jclouds.http.functions.ParseETagHeader; import org.jclouds.http.functions.ParseETagHeader;
import org.jclouds.http.functions.ParseSax; import org.jclouds.http.functions.ParseSax;
import org.jclouds.http.functions.ReturnFalseOn404;
import org.jclouds.http.functions.ReturnTrueIf2xx; import org.jclouds.http.functions.ReturnTrueIf2xx;
import org.jclouds.http.functions.ReturnVoidIf2xx; import org.jclouds.http.functions.ReturnVoidIf2xx;
import org.jclouds.http.options.GetOptions; import org.jclouds.http.options.GetOptions;
@ -185,7 +185,7 @@ public class S3AsyncClientTest extends RestClientTest<S3AsyncClient> {
assertResponseParserClassEquals(method, httpMethod, ReturnTrueIf2xx.class); assertResponseParserClassEquals(method, httpMethod, ReturnTrueIf2xx.class);
assertSaxResponseParserClassEquals(method, null); assertSaxResponseParserClassEquals(method, null);
assertExceptionParserClassEquals(method, ReturnFalseOn404.class); assertExceptionParserClassEquals(method, ReturnFalseOn404OrSSLHandshakeException.class);
checkFilters(httpMethod); checkFilters(httpMethod);
} }

View File

@ -41,7 +41,7 @@ public class S3TestInitializer extends BaseTestInitializer<S3AsyncClient, S3Clie
protected BlobStoreContext<S3AsyncClient, S3Client> createLiveContext( protected BlobStoreContext<S3AsyncClient, S3Client> createLiveContext(
Module configurationModule, String url, String app, String account, String key) { Module configurationModule, String url, String app, String account, String key) {
BaseBlobStoreIntegrationTest.SANITY_CHECK_RETURNED_BUCKET_NAME = true; BaseBlobStoreIntegrationTest.SANITY_CHECK_RETURNED_BUCKET_NAME = true;
return new S3BlobStoreContextBuilder(new S3PropertiesBuilder(account, key).relaxSSLHostname() return new S3BlobStoreContextBuilder(new S3PropertiesBuilder(account, key)
.build()).withModules(configurationModule, new Log4JLoggingModule()).buildContext(); .build()).withModules(configurationModule, new Log4JLoggingModule()).buildContext();
} }

View File

@ -0,0 +1,25 @@
package org.jclouds.aws.s3.functions;
import javax.inject.Singleton;
import javax.net.ssl.SSLHandshakeException;
import org.jclouds.http.functions.ReturnFalseOn404;
/**
* S3 buckets are dns names. When we attempt to resolve them, it could throw a misleading
* SSLHandshakeException when the bucket isn't found.
*
* @author Adrian Cole
*/
@Singleton
public class ReturnFalseOn404OrSSLHandshakeException extends ReturnFalseOn404 {
public Boolean apply(Exception from) {
Boolean returnVal = super.apply(from);
if (returnVal == null && from instanceof SSLHandshakeException) {
return false;
}
return returnVal;
}
}