简体   繁体   English

使用 AWS SDK 为 Java 创建 Amazon S3 存储桶:线程“主”java.lang.NoClassDefFoundError 中的异常

[英]Creating an Amazon S3 bucket Using the AWS SDK for Java : Exception in thread "main" java.lang.NoClassDefFoundError

Getting below error while trying to create an s3 bucket of aws using java API:尝试使用 java API 创建 s3 存储桶时出现以下错误:

Error: Exception in thread "main" java.lang.NoClassDefFoundError: software/amazon/awssdk/protocols/query/internal/unmarshall/AwsXmlErrorUnmarshaller at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer.(AwsXmlErrorTransformer.java:40) at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer.(AwsXmlErrorTransformer.java:34) at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer$Builder.build(AwsXmlErrorTransformer.java:113) at software.amazon.awssdk.protocols.xml.AwsXmlProtocolFactory.createErrorTransformer(AwsXmlProtocolFactory.java:135) at software.amazon.awssdk.protocols.xml.AwsS3ProtocolFactory.create Error: Exception in thread "main" java.lang.NoClassDefFoundError: software/amazon/awssdk/protocols/query/internal/unmarshall/AwsXmlErrorUnmarshaller at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer.(AwsXmlErrorTransformer.java :40) at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer.(AwsXmlErrorTransformer.java:34) at software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlErrorTransformer$Builder.build(AwsXmlErrorTransformer. java:113) at software.amazon.awssdk.protocols.xml.AwsXmlProtocolFactory.createErrorTransformer(AwsXmlProtocolFactory.java:135) at software.amazon.awssdk.protocols.xml.AwsS3ProtocolFactory.create ErrorCouldBeInBodyResponseHandler(AwsS3ProtocolFactory.java:80) at software.amazon.awssdk.services.s3.DefaultS3Client.createBucket(DefaultS3Client.java:1144) at com.act.niti.main(niti.java:33) Caused by: java.lang.ClassNotFoundException: software.amazon.awssdk.protocols.query.internal.unmarshall.AwsXmlErrorUnmarshaller at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351).. ErrorCouldBeInBodyResponseHandler(AwsS3ProtocolFactory.java:80) at software.amazon.awssdk.services.s3.DefaultS3Client.createBucket(DefaultS3Client.java:1144) at com.act.niti.main(niti.java:33) Caused by: java.lang .ClassNotFoundException: software.amazon.awssdk.protocols.query.internal.unmarshall.AwsXmlErrorUnmarshaller at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun .misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) 在 java.lang.ClassLoader.loadClass(ClassLoader.Z93F725A07423FE21F886F).

Code:代码:

 try {
     Region region = Region.US_EAST_2; 
     S3Client s3 = S3Client.builder()
        .region(region)
        .build();
         S3Waiter s3Waiter = s3.waiter();
         CreateBucketRequest bucketRequest = CreateBucketRequest.builder()
                .bucket("abc")
                .build();
         
        
         s3.createBucket(bucketRequest); //creating s3 bucket
          System.out.println("bucket........abc");
          HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder()
          .bucket("abc")
          .build();
          
          // Wait until the bucket is created and print out the response
          WaiterResponse<HeadBucketResponse> waiterResponse =
          s3Waiter.waitUntilBucketExists(bucketRequestWait);
          waiterResponse.matched().response().ifPresent(System.out::println);
          System.out.println("abc" +" is ready");
         

    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
            Note : Using java 8

POM Xml: POM Xml:

<dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.11.570</version>
        </dependency>
        
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
            <version>2.17.269</version>
        </dependency>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>ec2</artifactId>
            <version>2.5.10</version>
        </dependency>       
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-gamelift -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-gamelift</artifactId>
            <version>1.11.647</version>
        </dependency>
        

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
   
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-commons</artifactId>
            <version>1.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.8.2</version>
            <scope>test</scope>
        </dependency>
   
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3-transfer-manager</artifactId>
            <version>2.17.103-PREVIEW</version>
        </dependency>
    <dependencies>

Looks like you are mixing up V1 and V2 in your POM file.看起来您在 POM 文件中混合了 V1 和 V2。 You have你有

  <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.11.570</version>
  </dependency>

There is no need for this Dep when using AWS SDK for V2.使用 AWS SDK for V2 时不需要此 Dep。 S3Client is a V2 Service Client. S3Client是一个 V2 服务客户端。 In fact -- your errors are most likely related to mxing up SDK versions in your POM file.事实上 - 您的错误很可能与在您的 POM 文件中混合 SDK 版本有关。

The POM file that you should use can be found in the AWS Github repo here:您应该使用的 POM 文件可以在此处的 AWS Github 存储库中找到:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/s3 https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/s3

If you are not familiar with AWS SDK for Java v2 , refer to the DEV Guide:如果您对 Java v2 的 AWS SDK不熟悉,请参阅开发指南:

https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html

The V2 Java code that works when you use the proper POM file is here:当您使用正确的 POM 文件时,V2 Java 代码在这里:

package com.example.s3;

// snippet-start:[s3.java2.create_bucket_waiters.import]
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.waiters.WaiterResponse;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
import software.amazon.awssdk.services.s3.model.HeadBucketResponse;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.waiters.S3Waiter;
import java.net.URISyntaxException;
// snippet-end:[s3.java2.create_bucket_waiters.import]

/**
 * Before running this Java V2 code example, set up your development environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */

public class CreateBucket {

    public static void main(String[] args) throws URISyntaxException {

        final String usage = "\n" +
            "Usage:\n" +
            "    <bucketName> \n\n" +
            "Where:\n" +
            "    bucketName - The name of the bucket to create. The bucket name must be unique, or an error occurs.\n\n" ;

       if (args.length != 1) {
           System.out.println(usage);
           System.exit(1);
       }

        String bucketName = args[0];
        System.out.format("Creating a bucket named %s\n", bucketName);
        ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
        Region region = Region.US_EAST_1;
        S3Client s3 = S3Client.builder()
            .region(region)
            .credentialsProvider(credentialsProvider)
            .build();

        createBucket (s3, bucketName);
        s3.close();
    }

    // snippet-start:[s3.java2.create_bucket_waiters.main]
    public static void createBucket( S3Client s3Client, String bucketName) {

        try {
            S3Waiter s3Waiter = s3Client.waiter();
            CreateBucketRequest bucketRequest = CreateBucketRequest.builder()
                .bucket(bucketName)
                .build();

            s3Client.createBucket(bucketRequest);
            HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder()
                .bucket(bucketName)
                .build();

            // Wait until the bucket is created and print out the response.
            WaiterResponse<HeadBucketResponse> waiterResponse = s3Waiter.waitUntilBucketExists(bucketRequestWait);
            waiterResponse.matched().response().ifPresent(System.out::println);
            System.out.println(bucketName +" is ready");

        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
    // snippet-end:[s3.java2.create_bucket_waiters.main]
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用 AWS SDK for Java v2 创建 Amazon S3 存储桶:线程“main”java.lang.NoClassDefFoundError 中的异常 - Creating an Amazon S3 bucket Using the AWS SDK for Java v2 : Exception in thread "main" java.lang.NoClassDefFoundError 主线程java.lang.NoClassDefFoundError中的异常 - Exception in main thread java.lang.NoClassDefFoundError 线程“ main”中的异常java.lang.NoClassDefFoundError - exception in thread 'main' java.lang.NoClassDefFoundError 线程“main”java.lang.NoClassDefFoundError中的异常: - Exception in thread “main” java.lang.NoClassDefFoundError: 线程“主”java.lang.NoClassDefFoundError 中的异常: - exception in thread 'main' java.lang.NoClassDefFoundError: 线程“main”java.lang.NoClassDefFoundError中的异常 - Exception in thread “main” java.lang.NoClassDefFoundError 线程“ main” java.lang.NoClassDefFoundError中的异常: - exception in thread“main”java.lang.NoClassDefFoundError: 线程“ main”中的异常java.lang.NoClassDefFoundError - Exception in thread “main” java.lang.NoClassDefFoundError 线程“ main”中的异常java.lang.NoClassDefFoundError: - Exception in thread “main” java.lang.NoClassDefFoundError: 线程“ main”中的异常java.lang.NoClassDefFoundError: - Exception in thread “main” java.lang.NoClassDefFoundError:
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM