Java Notification处理程序在发送Amazon Textract请求时导致错误
我正在尝试使用AmazonTextract解析PDF,这需要是一个异步操作,如他们的文档中所述 我使用的代码遵循我在上找到的代码 我已经对错误进行了本地化,以理解错误是由于作为请求的一部分提交的通知处理程序引起的,但是稍后在获得结果时需要这样做 我应该注意到,我已经尝试过直接显示和使用ARN的手动配置,但我遇到了同样的问题 我的s3存储桶位于VPC中,但是我确信我的IAM设置正确,因为我已经成功地从png文件中提取了文本(使用了不同的非异步方法)。这些是添加的策略Java Notification处理程序在发送Amazon Textract请求时导致错误,java,amazon-web-services,amazon-textract,Java,Amazon Web Services,Amazon Textract,我正在尝试使用AmazonTextract解析PDF,这需要是一个异步操作,如他们的文档中所述 我使用的代码遵循我在上找到的代码 我已经对错误进行了本地化,以理解错误是由于作为请求的一部分提交的通知处理程序引起的,但是稍后在获得结果时需要这样做 我应该注意到,我已经尝试过直接显示和使用ARN的手动配置,但我遇到了同样的问题 我的s3存储桶位于VPC中,但是我确信我的IAM设置正确,因为我已经成功地从png文件中提取了文本(使用了不同的非异步方法)。这些是添加的策略 AmazonSQSFullA
- AmazonSQSFullAccess
- AmazonS3FullAccess
- AmazonTextractFullAccess
- AmazonTextractServiceRole
- 亚马逊索尔
- AmazonsFullAccess
// Creates an SNS topic and SQS queue. The queue is subscribed to the topic.
static void CreateTopicandQueue(){
//create a new SNS topic
snsTopicName="AmazonTextractTopic" + Long.toString(System.currentTimeMillis());
CreateTopicRequest createTopicRequest = new CreateTopicRequest(snsTopicName);
CreateTopicResult createTopicResult = sns.createTopic(createTopicRequest);
snsTopicArn=createTopicResult.getTopicArn();
//Create a new SQS Queue
sqsQueueName="AmazonTextractQueue" + Long.toString(System.currentTimeMillis());
final CreateQueueRequest createQueueRequest = new CreateQueueRequest(sqsQueueName);
sqsQueueUrl = sqs.createQueue(createQueueRequest).getQueueUrl();
sqsQueueArn = sqs.getQueueAttributes(sqsQueueUrl, Arrays.asList("QueueArn")).getAttributes().get("QueueArn");
//Subscribe SQS queue to SNS topic
String sqsSubscriptionArn = sns.subscribe(snsTopicArn, "sqs", sqsQueueArn).getSubscriptionArn();
// Authorize queue
Policy policy = new Policy().withStatements(
new Statement(Effect.Allow)
.withPrincipals(Principal.AllUsers)
.withActions(SQSActions.SendMessage)
.withResources(new Resource(sqsQueueArn))
.withConditions(new Condition().withType("ArnEquals").withConditionKey("aws:SourceArn").withValues(snsTopicArn))
);
Map queueAttributes = new HashMap();
queueAttributes.put(QueueAttributeName.Policy.toString(), policy.toJson());
sqs.setQueueAttributes(new SetQueueAttributesRequest(sqsQueueUrl, queueAttributes));
System.out.println("Topic arn: " + snsTopicArn);
System.out.println("Queue arn: " + sqsQueueArn);
System.out.println("Queue url: " + sqsQueueUrl);
System.out.println("Queue sub arn: " + sqsSubscriptionArn );
}
这是我对错误的堆栈跟踪:
{DocumentLocation: {S3Object: {Bucket: <bucketname>,Name: <filename>,}},JobTag: DetectingText,NotificationChannel: {SNSTopicArn: <Arn>,RoleArn: <arn}}
Exception in thread "main" com.amazonaws.services.textract.model.InvalidParameterException: Request has invalid parameters (Service: AmazonTextract; Status Code: 400; Error Code: InvalidParameterException; Request ID: <>)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.textract.AmazonTextractClient.doInvoke(AmazonTextractClient.java:816)
at com.amazonaws.services.textract.AmazonTextractClient.invoke(AmazonTextractClient.java:783)
at com.amazonaws.services.textract.AmazonTextractClient.invoke(AmazonTextractClient.java:772)
at com.amazonaws.services.textract.AmazonTextractClient.executeStartDocumentTextDetection(AmazonTextractClient.java:738)
at com.amazonaws.services.textract.AmazonTextractClient.startDocumentTextDetection(AmazonTextractClient.java:708)
at AnalyzeDocumentAsync.StartDocumentTextDetection(AnalyzeDocumentAsync.java:279)
at AnalyzeDocumentAsync.ProcessDocument(AnalyzeDocumentAsync.java:158)
at AnalyzeDocumentAsync.main(AnalyzeDocumentAsync.java:91)
Process finished with exit code 1
{DocumentLocation:{S3Object:{Bucket:,Name:,}},工作标签:DetectingText,NotificationChannel:{SNSTopicArn:,RoleArn:我遇到了完全相同的问题,您找到了相同的解决方案吗?
{DocumentLocation: {S3Object: {Bucket: <bucketname>,Name: <filename>,}},JobTag: DetectingText,NotificationChannel: {SNSTopicArn: <Arn>,RoleArn: <arn}}
Exception in thread "main" com.amazonaws.services.textract.model.InvalidParameterException: Request has invalid parameters (Service: AmazonTextract; Status Code: 400; Error Code: InvalidParameterException; Request ID: <>)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.textract.AmazonTextractClient.doInvoke(AmazonTextractClient.java:816)
at com.amazonaws.services.textract.AmazonTextractClient.invoke(AmazonTextractClient.java:783)
at com.amazonaws.services.textract.AmazonTextractClient.invoke(AmazonTextractClient.java:772)
at com.amazonaws.services.textract.AmazonTextractClient.executeStartDocumentTextDetection(AmazonTextractClient.java:738)
at com.amazonaws.services.textract.AmazonTextractClient.startDocumentTextDetection(AmazonTextractClient.java:708)
at AnalyzeDocumentAsync.StartDocumentTextDetection(AnalyzeDocumentAsync.java:279)
at AnalyzeDocumentAsync.ProcessDocument(AnalyzeDocumentAsync.java:158)
at AnalyzeDocumentAsync.main(AnalyzeDocumentAsync.java:91)
Process finished with exit code 1