标签: aws-java-sdk

尝试使用java将文件上传到Amazon S3时,Jackson的NoSuchMethodError.

我的项目是尝试使用aws-java-sdk-1.11.15将文件上传到Amazon S3.我正在使用ant在CLI上构建我的项目.我使用的杰克逊版本是2.8.0.我正在将我的lib文件夹添加到我的类路径中.我的所有jar文件都在我的lib文件夹中.我在运行代码时得到以下信息 -

Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.enable([Lcom/fasterx
ml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/databind/ObjectMapper;
at com.amazonaws.partitions.PartitionsLoader.(PartitionsLoader.java:54)
at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:66)
at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:54)
at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:107)
at com.amazonaws.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3256)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3952)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1538)
at code4goal.antony.resumeparser.ResumeParserProgram.main(ResumeParserProgram.java:613)
Run Code Online (Sandbox Code Playgroud)

对于这段代码 -

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
try
{
    File file = new File(uploadFileName);
    s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
}
Run Code Online (Sandbox Code Playgroud)

错误发生在s3client.putObject(new PutObjectRequest(bucketName,keyName,file));

ant exception amazon-s3 jackson aws-java-sdk

5
推荐指数
2
解决办法
5481
查看次数

等待EC2实例启动

我有一个运行我的服务的自定义AMI。使用AWS Java SDK,我使用RunInstancesRequestAMI 创建EC2实例。现在,在开始使用服务之前,必须确保新创建的实例已启动并正在运行。我使用以下方法轮询实例:

var transitionCompleted = false
while (!transitionCompleted) {
  val currentState = instance.getState.getName
  if (currentState == desiredState) {
    transitionCompleted = true
  }
  if(!transitionCompleted) {
    try {
      Thread.sleep(TRANSITION_INTERVAL)
    } catch {
      case e: InterruptedException => e.printStackTrace()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,当currentState实例的变成desiredState(是running)时,我得到实例已准备就绪的状态。但是,任何新创建的实例尽管处于running状态,但仍在初始化中,因此无法立即使用。

如何确保仅在能够访问实例及其服务时才返回?是否要进行任何特定的状态检查?

PS:我使用Scala

scala amazon-ec2 amazon-web-services aws-sdk aws-java-sdk

5
推荐指数
0
解决办法
965
查看次数

writeTo PipedOutputStream 只是挂起

我的目标是:

  1. 从 S3 读取文件,
  2. 更改其元数据
  3. 再次推送到S3

AWS java SDK 不允许推送输出流。因此,我必须将outputstream步骤2转换为inputstream. 为此我决定使用PipedInputStream.

但是,我的代码只是挂在该writeTo(out);步骤中。此代码位于 Grails 应用程序中。当代码挂起时CPU不是处于高消耗状态:

import org.apache.commons.imaging.formats.jpeg.xmp.JpegXmpRewriter;

AmazonS3Client client = nfile.getS3Client() //get S3 client
S3Object object1 = client.getObject(
                  new GetObjectRequest("test-bucket", "myfile.jpg")) //get the object. 

InputStream isNew1 = object1.getObjectContent(); //create input stream
ByteArrayOutputStream os = new ByteArrayOutputStream();
PipedInputStream inpipe = new PipedInputStream();
final PipedOutputStream out = new PipedOutputStream(inpipe);

try {
   String xmpXml = "<x:xmpmeta>" +
    "\n<Lifeshare>" +
    "\n\t<Date>"+"some date"+"</Date>" +
    "\n</Lifeshare>" +
    "\n</x:xmpmeta>";/
   JpegXmpRewriter …
Run Code Online (Sandbox Code Playgroud)

java groovy inputstream aws-java-sdk

5
推荐指数
1
解决办法
2308
查看次数

AWS Java SDK不支持log4j属性

每当我使用AWS Java SDK时,都会被疯狂的日志轰炸,因为它被设置为调试状态,而我无法保持其正常运行。

以下是带有-Dlog4j.debug标志的输出结果。

它表明我的log4j.properties文件已被读取和解析。使用root logger OFFcom.amazonawsat,WARN但我仍然看到调试级别的日志记录。我想念什么吗?

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@42a57993.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@42a57993 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@42a57993.
log4j: Using URL [jar:file:/p-test/target/scala-2.11/phoenix-test-assembly-81fc4750d1.jar!/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL jar:file:/p-test/target/scala-2.11/phoenix-test-assembly-81fc4750d1.jar!/log4j.properties
log4j: Parsing for [root] with value=[OFF].
log4j: Level token is [OFF].
log4j: Category root set to OFF
log4j: …
Run Code Online (Sandbox Code Playgroud)

log4j aws-java-sdk

5
推荐指数
1
解决办法
325
查看次数

安装Java 11时,Java -version显示Java 8

在我的系统上安装Java 11之后,运行时继续为1.8

安装的Java版本:

  • C:\ Program Files \ Java \ jre1.8.0_201
  • C:\ Program Files \ Java \ jdk-11.0.3

JAVA_HOME env变量值: C:\Program Files\Java\jdk-11.0.3

在运行命令提示符的命令提示符java -version下,期望看到Java 11信息,但我看到了Java 8。

更改环境变量值不会更改结果,重新启动似乎没有任何作用。

C:\Users\user>java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) Client VM (build 25.211-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)

应该是显示Java 11运行时信息

java aws-java-sdk

5
推荐指数
3
解决办法
577
查看次数

在重试因 ProvisionedThroughputExceededException 而失败的请求时,标准 AmazonDynamoDBClient 是否使用指数退避?

AmazonDynamoDBClient使用以下方法创建了一个标准AmazonDynamoDBClientBuilder

AmazonDynamoDBClient client = AmazonDynamoDBClientBuilder.standard().build();
Run Code Online (Sandbox Code Playgroud)

AmazonDynamoDBClient 的文档中,它提到:

ProvisionedThroughputExceededException- 您的请求率太高。适用于 DynamoDB 的 AWS 开发工具包会自动重试收到此异常的请求。您的请求最终会成功,除非您的重试队列太大而无法完成。减少请求频率并使用指数退避。

当重试由于 原因而失败的请求时,标准客户端是否默认使用指数退避ProvisionedThroughputExceededException?或者这是我需要手动配置的东西?

amazon-dynamodb aws-sdk aws-java-sdk exponential-backoff

5
推荐指数
1
解决办法
1万
查看次数

在控制器建议中获取控制器名称和java服务路径

大家好,我在 Spring Boot 应用程序中创建了一个全局异常处理程序,并在下面的代码中写入了 AWS cloudwatch 中发生的异常,工作正常我能够在 cloudwatch 中写入异常,但挑战是我无法获取 Restcontroller 名称和服务路径从发生特定异常的地方。

示例 Java 服务

@GetMapping(value = "DynamoDb/deleteTable")
public String deleteTable(@RequestParam String TableName) throws InterruptedException {
     Table table = dynamoDB.getTable(TableName);
        try {
            table.delete();
            table.waitForDelete();
        } catch (Exception e) {
            throw e;
        }
        return "Success";
    }
Run Code Online (Sandbox Code Playgroud)

当发生异常时,它将控制权转移到controlleradvice全局异常处理程序

这是我的代码

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.cloudwatchlogs.CloudWatchLogsClient;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsRequest;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsResponse;
import software.amazon.awssdk.services.cloudwatchlogs.model.InputLogEvent;
import software.amazon.awssdk.services.cloudwatchlogs.model.PutLogEventsRequest;

import java.util.Arrays;

@ControllerAdvice
public class ExceptionControllerAdvice {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> exceptionHandler(Exception ex) {
        ErrorResponse …
Run Code Online (Sandbox Code Playgroud)

java spring-boot aws-java-sdk aws-cloudwatch-log-insights

5
推荐指数
1
解决办法
5761
查看次数

如何使用 AWS java SDK 使用 AWS 胶水作业自动生成脚本

我正在使用 Java Sdk 创建胶水作业。它只有两个必需的参数 Command 和 Glue 版本。但我需要通过自动脚本生成来创建工作。正如我们可以从控制台执行的那样,我们添加数据源、AWS Glue 生成的建议脚本、转换类型、数据目标、架构等。如何使用 java sdk 或什至使用 awsglue api 将这些参数添加到胶水作业中。

           CreateJobRequest req = new CreateJobRequest();
            req.setName("TestJob2");
            req.setRole("GlueS3Role");
            req.setGlueVersion("1.0");
            JobCommand command = new JobCommand();
            command.setName("glueetl");
            command.setPythonVersion("3");
            **// S3 location need not to be given, as script code is auto generated by AWS glue
           command.setScriptLocation(S3ScriptLocation);**
            req.setCommand(command);

            AWSGlue glueClient = AWSGlueClientBuilder.standard()
                                 .withRegion(Regions.US_EAST_1)
                                 .withCredentials(new AWSStaticCredentialsProvider(creds))
                                 .build();

            glueClient.createJob(req);
        }
Run Code Online (Sandbox Code Playgroud)

aws-java-sdk aws-glue aws-java-sdk-2.x

5
推荐指数
1
解决办法
986
查看次数

在嵌套对象中使用 DynamoDB 注释

我尝试在嵌套对象中使用 DynamoDB 注释,如下所示:

@DynamoDBTable(tableName=xyz)
class entity1{
    @DynamoDBAttribute
    @DynamoDBTypeConvertedJson
    private List<UserAction> userActions;
}

class UserAction{
    @DynamoDBAutoGeneratedKey
    private String actionId;

    @DynamoDBAttribute
    @DynamoDBAutoGeneratedTimestamp(strategy = DynamoDBAutoGenerateStrategy.CREATE)
    private Long createdTime;
}
Run Code Online (Sandbox Code Playgroud)

我没有看到上述属性是在 UserAction 类中自动生成的。我想知道嵌套对象是否支持这些注释用法。请建议。

java amazon-dynamodb aws-java-sdk

5
推荐指数
1
解决办法
2250
查看次数

AmazonS3 与 S3Client 之间的区别

我正在尝试访问存储在 s3 存储桶中的 pdf 。我有存储桶名称和 arn。经过大量示例后,我不明白两种服务 S3Client 和 AmazonS3 之间的区别。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withRegion(Region.US_EAST_1)
                .withCredentials(new ProfileCredentialsProvider())
                .build();

S3Client s3Client = S3Client.builder().region(Region.US_EAST_1).build();
Run Code Online (Sandbox Code Playgroud)

不知道该用什么?

amazon-s3 amazon-web-services aws-java-sdk

5
推荐指数
1
解决办法
9344
查看次数