【问题标题】:javax.xml.stream.XMLStreamException exception being thrown while calling amazonSQS.deleteMessage(queueURL, receiptHandle)调用 amazonSQS.deleteMessage(queueURL,receiptHandle) 时抛出 javax.xml.stream.XMLStreamException 异常
【发布时间】:2021-03-18 10:02:20
【问题描述】:

我正在开发一个应用程序,我通过 Apache Camel 连接到 SQS 队列,它只需要 AmazonSQS 客户端(我找不到 Camel + AWS SDK 和 Java 2.x 的任何引用)作为 SQS 队列的一部分的参数网址。

作为同一个应用程序的一部分,我在 SQS 中执行不同的操作,其中之一是删除消息。使用 AmazonSQS.delete(queueURL,receiptHanlde) 从 AWS SQS 队列中删除消息时。下面是同样抛出的异常。但是,该消息正在从队列中删除。看起来它正在尝试在删除消息并失败后解析响应。

请建议如何解决异常。

com.amazonaws.SdkClientException:无法解组响应(ParseError at [row,col]:[1,1] 消息:序言中不允许内容。)。响应代码:200,响应文本: 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleResponse(AmazonHttpClient.java:1681) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleSuccessResponse(AmazonHttpClient.java:1422) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1344) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1127) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:784) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:752) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512) 在 com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:2207) 在 com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2174) 在 com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2163) 在 com.amazonaws.services.sqs.AmazonSQSClient.executeDeleteMessage(AmazonSQSClient.java:893) 在 com.amazonaws.services.sqs.AmazonSQSClient.deleteMessage(AmazonSQSClient.java:865) 在 com.orchestrator.api.processor.BenefitFocusSoldCaseProcessor.soldCaseProcess(BenefitFocusSoldCaseProcessor.java:72) 在 com.orchestrator.api.processor.BenefitFocusSoldCaseProcessor.process(BenefitFocusSoldCaseProcessor.java:35) 在 org.apache.camel.support.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:66) 在 org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395) 在 org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) 在 org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:147) 在 org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:312) 在 org.apache.camel.component.aws.sqs.SqsConsumer.processBatch(SqsConsumer.java:213) 在 org.apache.camel.component.aws.sqs.SqsConsumer.poll(SqsConsumer.java:111) 在 org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190) 在 org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] 消息:prolog 中不允许有内容。 在 com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) 在 com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderImpl.java:276) 在 com.amazonaws.transform.StaxUnmarshallerContext.nextEvent(StaxUnmarshallerContext.java:220) 在 com.amazonaws.services.sqs.model.transform.DeleteMessageResultStaxUnmarshaller.unmarshall(DeleteMessageResultStaxUnmarshaller.java:40) 在 com.amazonaws.services.sqs.model.transform.DeleteMessageResultStaxUnmarshaller.unmarshall(DeleteMessageResultStaxUnmarshaller.java:28) 在 com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:106) 在 com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:42) 在 com.amazonaws.http.response.AwsResponseHandlerAdapter.handle(AwsResponseHandlerAdapter.java:69) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleResponse(AmazonHttpClient.java:1657) ... 34 更多

【问题讨论】:

  • 使用 V2 的更好做法,请参阅下面的答案。

标签: amazon-web-services spring-boot amazon-sqs parse-error spring-camel


【解决方案1】:

您正在使用 V1,即 com.amazonaws.services.sqs.AmazonSQSClient

亚马逊建议使用 AWS SDK for Java 2.x,它是对构建于 Java 8+ 之上的 1.11.x 代码库的重大重写。 Java SDK 2.x 改进了一致性、易用性和强制执行的不变性。它还支持非阻塞 I/O,并能够在运行时插入不同的 HTTP 实现

您可以在此处找到此用例的 V2 示例。

https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/sqs/src/main/java/com/example/sqs/SQSExample.java

如果您不熟悉 AWS SDK for Java V2,我建议您阅读此文档:

Get started with the AWS SDK for Java 2.x

刚刚测试了该代码示例,它可以正常工作。

【讨论】:

  • 非常感谢您的回复。很抱歉,我没有在我的问题前面提到我正在使用 apache Camel + SQS 认为 amazonSQS 不会导致问题。我现在用正确的信息编辑了我的问题。
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多