不是由该工厂创建的AWS Socket

Far*_*hir 4 amazon-s3 amazon-web-services spring-boot

我正在尝试将某些对象放入s3中,并且在不是由该工厂创建的aws套接字上引发错误有人对此有任何线索吗?

它在此功能上的失败

public void uploadToS3(Object obj) {
        try {
            ByteArrayInputStream input = new ByteArrayInputStream(obj.toString().getBytes());
            s3client.listBuckets();
            s3client.putObject(bucketName,fileName,input,new ObjectMetadata());
        }
        catch(AmazonServiceException e) {
            System.out.println(e.toString());
        }

    }
Run Code Online (Sandbox Code Playgroud)

这是错误消息

此工厂不是在org.apache的org.apache.http.conn.ssl.SSLSocketFactory.isSecure(SSLSocketFactory.java:435)的org.apache.http.util.Asserts.check(Asserts.java:34)上创建的套接字org.apache的.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:186)。org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)org.apache.http.impl.client.DefaultRequestDirector org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)上的.tryConnect(DefaultRequestDirector.java:610)org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)上的.tryConnect(DefaultRequestDirector.java:610) )的org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)的org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)。com上的amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:749)com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:505)com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:317) com.amazonaws.services.s3上的.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3595)com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3548)上的AmazonS3Client.invoke(AmazonS3Client.java:3548) .java:697)位于com.amazonaws.services.s3。AmazonS3Client.listBuckets(AmazonS3Client.java:703)位于com.mobacar.service.DataModelService.uploadToS3(DataModelService.java:33),位于com.mobacar.handler.UnconvertedRiDataModelMessageHandler。 sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法)处sun.reflect.NativeMethodAccessorImpl的handle(UnconvertedRiDataModelMessageHandler.java:38)。在sun.reflect.DelegatingMethodAccessorImpl.invoke上调用(Unknown Source)

这是配置类:

@Configuration
public class S3Config {

    @Value("${aws.accessKey}")
    private String accessKey;

    @Value("${aws.secretKey}")
    private String secretKey;

    @Value("${aws.region}")
    private String region;

    @Bean
    public BasicAWSCredentials basicAWSCredentials() {
        return new BasicAWSCredentials(accessKey, secretKey);
    }

    @Bean(name="amazonClient")
    public AmazonS3Client amazonS3Client(AWSCredentials awsCredentials) {
        AmazonS3Client amazonS3Client = new AmazonS3Client(awsCredentials);
        amazonS3Client.setRegion(Region.getRegion(Regions.fromName(region)));
        return amazonS3Client;
    }


}
Run Code Online (Sandbox Code Playgroud)

这里是依赖项:

<dependencies>
        <dependency>
            <groupId>com.mobacar.searchmanager</groupId>
            <artifactId>valueObject</artifactId>
             <version>0.0.1-SNAPSHOT</version>
        </dependency>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
             <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- Starter Dependecy S3 -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.10.39</version>
        </dependency>
        <!--  -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
                <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

Far*_*hir 5

我终于弄明白了。Amazon Java SDK需要另一个版本的htppclient,它不是来自spring托管的httpclient。因此,只需添加此依赖项。

        <dependency>
         <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
         <version>4.5</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

  • 在添加之前,请确保将 httpclient 从 aws-java-sdk 依赖项中排除。 (2认同)