0

I am trying to implement a simple Java/Scala client to connect to the S3 Service which provided by the OpenStack Swift(it supports S3 API). However the codes seems not working when I am using AWS Java SDK 1.11.176. Could anyone share me some lights?

Thanks!

def listBuckets(config: Config, bucketName: String): Unit = {
    val accessKey = "85eb40dxxxxx"
    val secretKey = "xxxxxxxxxxxx"
    val endPoint = "https://v01.my.company.net:8080"
    val credentials = new BasicAWSCredentials(accessKey, secretKey);
    val clientConfig = new ClientConfiguration();
    clientConfig.setProtocol(Protocol.HTTPS);
    val client = AmazonS3ClientBuilder.standard()
       .withCredentials(newAWSStaticCredentialsProvider(credentials))
       .withClientConfiguration(clientConfig)
       .withPathStyleAccessEnabled(true)
       .withEndpointConfiguration(new EndpointConfiguration(endPoint, "us-east-1"))
       .build();
    System.out.println(client.listBuckets())
}

Error is like this:

null (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: null; S3 Extended Request ID: null) com.amazonaws.services.s3.model.AmazonS3Exception: null (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: null; S3 Extended Request ID: null), S3 Extended Request ID: null at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1587) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1257) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1029) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:741) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:715) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:697) at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:665) at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:647) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:511) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4227) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4174) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4168) at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:918) at com.amazonaws.services.s3.AmazonS3Client.listBuckets(AmazonS3Client.java:924)

Martin Peng
  • 87
  • 1
  • 9
  • Openstack Swift does not Support S3 API by default. Are you sure this support is enabled? – Nelson Marcos Aug 15 '17 at 13:42
  • @NelsonMarcos, thanks for you reply. Yes, I can use the 3pp tool s3cmd to access the Swift S3API correctly. The environment was set up by Mirantis. – Martin Peng Aug 15 '17 at 16:06
  • have you tried to force v2 signing? – khc Aug 15 '17 at 21:31
  • @khc, could you explain a little more detail? there are too many parameters. thanks! – Martin Peng Aug 15 '17 at 22:48
  • Looks like my S3 SDK doesn't have V2 Type. // Register the standard signer types. SIGNERS.put(QUERY_STRING_SIGNER, QueryStringSigner.class); SIGNERS.put(VERSION_THREE_SIGNER, AWS3Signer.class); SIGNERS.put(VERSION_FOUR_SIGNER, AWS4Signer.class); SIGNERS.put(NO_OP_SIGNER, NoOpSigner.class); – Martin Peng Aug 15 '17 at 22:51
  • I downgrade the AWS S3 SDK from 1.11.176 to 1.10.77 and it works. What is the different between 1.11 and 1.10? – Martin Peng Aug 15 '17 at 23:56
  • The newer sdk defaults to v4 signing: https://aws.amazon.com/releasenotes/Java/9979983567247718 . Did using AWS3Signer.class work? – khc Aug 17 '17 at 00:28
  • Thanks @khc, I switched to AWS3Signer yesterday and it doesn't throw exception when list buckets, however no buckets are listed. Create bucket is not working as well when using AWS3Signer. I will try it again today. – Martin Peng Aug 17 '17 at 16:13

0 Answers0