调用amazonSQS.deleteMessage(queueURL,receiptHandle)时引发javax.xm



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

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

请建议如何解决异常。

com.amazonaws.SdkClientException:无法取消编组响应([行,列]处的ParseError:[1,1]消息:序言中不允许有内容。)。响应代码:200,响应文本:网址:com.amazonaws.http://AmazonHttpClient$RequestExecution.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.AamazonHttpClient$RequestExecution.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.exexecute(AmazonHttpClient.java:532)网址:com.amazonaws.http://AmazonHttpClient.exexecute(AmazonHttpClient.java:512)网址:com.amazonaws.services.sqs.AamazonSQSClient.doInvoke(AmazonSQSCClient.java:2207)网址:com.amazonaws.services.sqs.AmazonSQSClient.ioke(AmazonSQSClient.java:2174)网址:com.amazonaws.services.sqs.AmazonSQSClient.ioke(AmazonSQSClient.java:2163)网址:com.amazonaws.services.sqs.AmazonSQSClient.executeDelete Message(AmazonSQSC客户端.java:893)网址:com.amazonaws.services.sqs.AamazonSQSClient.deleteMessage(AmazonSQSCClient.java:865)网址:com.orchestrator.api.processor.PefitFocusSoldCaseProcessor.soldCaseProcess(BenefitFocsSoldCaseProcess.java:72)网址:com.orchestrator.api.producter.BenefitFocusSoldCaseProcessor.process(BenefitFOcusSoldCaseProcess.java:35)网址:org.apache.cocamel.support.producter.DelegateSyncProcessor.produce(DelegateSyncProcessor.java:66)网址:org.apache.cocamel.producter.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395)网址:org.apache.cocamel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)网址:org.apache.cocamel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutior.java:60)网址:org.apache.cocamel.processer.Pipeline.process(Pipeline.java:147)网址:org.apache.cocamel.impl.engine.CamelInternalProcessor.produce(CamelInternalProcessor.java:312)网址:org.apache.cocamel.component.aws.sqs.SqsConsumer.processBatch(SqsConserve.java:213)网址:org.apache.cocamel.component.aws.sqs.SqsConsumer.poll(SqsConserver.java:111)网址:org.apache.cocamel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190)网址:org.apache.cocamel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107)位于java.util.concurrent.Executors$RunnableAdapter.call(Executitors.java:511)位于java.util.concurrent.FFutureTask.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.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1149)位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)在java.lang.Thread.run(线程.java:748)引起原因:javax.xml.stream.XMLStreamException:[行,列]处的ParseError:[1,1]消息:prolog中不允许有内容。网址:com.sun.org/apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderCimpl.java:604)网址:com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderCimpl.java:276)网址:com.amazonaws.transform.StaxUnmarshallerContext.nextEvent(StaxUnmarhallerContext.java:220)网址:com.amazonaws.services.sqs.model.transform.DeleteMessageResultStaxUnmarshaller.umarshall(DeleteMessageResultStaxMunmarshaller.java:40)网址:com.amazonaws.services.sqs.model.transform.DeleteMessageResultStaxUnmarshaller.umarshall(DeleteMessageResultStaxMunmarshaller.java:28)网址:com.amazonaws.http.StaxResponseHandler.handle(StaxResponceHandler.java:106)网址:com.amazonaws.http.StaxResponseHandler.handle(StaxResponceHandler.java:42)网址:com.amazonaws.http.response.AwsResponseHandlerAdapter.handle(AwsResponceHandlerAdaper.java:69)网址:com.amazonaws.http://AmazonHttpClient$RequestExecution.handleResponse(AmazonHttpClient.java:1657)…还有34个

您使用的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

如果您不熟悉Java V2的AWS SDK,我可以建议您阅读以下文档:

开始使用AWS SDK for Java 2.x

刚刚测试了那个代码示例,它工作起来没有问题。

最新更新