尝试使用spring-integration-aws S3StreamingMessageSource轮询S3时使用NPE

fhdev25

我正在尝试按照以下示例(在流入站通道适配器下)使用S3StreamMessageSource轮询S3对象存储:https : //github.com/spring-projects/spring-integration-aws/tree/v1.1.0.RELEASE

@Bean
@InboundChannelAdapter(value = "s3Channel", poller = @Poller(fixedDelay = "15000", maxMessagesPerPoll = "1"))
public MessageSource<InputStream> s3InboundStreamingMessageSource() {
    S3StreamingMessageSource messageSource = new S3StreamingMessageSource(s3RemoteFileTemplate());
    messageSource.setRemoteDirectory(s3Bucket+"/INBOX/");
    messageSource.setFilter(new S3SimplePatternFileListFilter("test*"));
    messageSource.setFilter(new S3PersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "s3Stream"));
    return messageSource;
}

@Bean
@org.springframework.integration.annotation.Transformer(inputChannel = "s3Channel", outputChannel = "nullChannel")
public Transformer transformer() {
    return new StreamTransformer();
}

@Bean
public S3RemoteFileTemplate s3RemoteFileTemplate() {
    return new S3RemoteFileTemplate(new S3SessionFactory(amazonS3));
}

但每次我的应用启动时,都会引发NPE:

2018-01-24 23:25:42.243 ERROR 29808 --- [ask-scheduler-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.MessagingException: nested exception is java.lang.NullPointerException
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.lambda$run$0(AbstractPollingEndpoint.java:396)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:53)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:373)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at org.springframework.integration.json.SimpleJsonSerializer.toElement(SimpleJsonSerializer.java:92)
    at org.springframework.integration.json.SimpleJsonSerializer.toJson(SimpleJsonSerializer.java:74)
    at org.springframework.integration.file.remote.AbstractFileInfo.toJson(AbstractFileInfo.java:60)
    at org.springframework.integration.file.remote.AbstractRemoteFileStreamingMessageSource.doReceive(AbstractRemoteFileStreamingMessageSource.java:164)
    at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:141)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:230)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:250)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.lambda$run$0(AbstractPollingEndpoint.java:379)
    ... 13 more

当我逐步处理引发异常的位置时,它位于S3FileInfo.getPermissions中的代码部分,并且看到UnsupportedOperationException“使用[AmazonS3.getObjectAcl()]获得权限。”

我需要怎么做才能解决这个问题?我正在使用Spring Boot 1.5.9.RELEASE,spring-integration-aws 1.1.0.RELEASE,spring-integration-core 5.0.0.RELEASE

阿尔特姆·比兰(Artem Bilan)

如果要使用Spring Integration 5.0,则必须已经切换到Spring Boot 2.0以及Spring Integration AWS 2.0。

或者至少切换到Spring Integration-5.0.1.BUIDL-SNAPSHOT您提到的问题最近已在此处解决:https//github.com/spring-projects/spring-integration/commit/34ffd9654d5ab4ada14fb3b34792d7019a1a34f4#diff-f473860eda832ea1371776cafd6809f9

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

spring-integration-aws S3StreamingMessageSource如何删除远程文件?

使用Spring Integration AWS轮询S3存储桶以进行文件和处理

使用Spring Batch Integration为AWS S3中的每个新文件启动JobLaunchRequest

如何使用spring-integration-aws获取S3存储桶中当前日期的对象计数?

Spring XD(基于Spring Integration DSL)AWS S3接收器模块错误

s3的spring-integration-aws是否可以复制存储桶子目录?

来自多个s3存储桶的Spring Integration AWS s3-inbound-streaming-channel-adapter流

尝试使用Rails应用程序写时Aws :: S3 :: Errors :: AccessDenied

使用AWS S3 MV时的未知选项

Spring Integration AWS本地SQS

使用AWS S3 vs Cloudfront

AWS S3使用哪个端口?

如何使用Spring Cloud AWS从S3删除文件?

Spring Integration AWS-S3-Inbound-Adapter-deleteSourceFiles和备份文件

尝试使用带有选择的 AWS 查询来查询 aws s3 对象

使用S3消息处理程序和Spring Integration动态设置S3存储桶

使用AWS Lambda上传到AWS S3

尝试使用 React 和 Express 将图像上传到 aws S3 时出现 HTTP 放置请求错误

使用 Spring Integration 防止消息被多次轮询?

使用 cakephp 3 上传 AWS S3 文件

AWS 尝试使用 Lambda

AWS S3:尝试访问的存储桶必须使用指定的终结点进行寻址

尝试使用AWS S3 CLI复制一个文件

尝试使用aws-cdk授予s3 Log Delivery Group的完全权限

使用Spring集成轮询文件的S3存储桶

Spring Integration AWS-S3入站适配器将读取的文件传递到输出通道

Spring AWS Integration的检查点

Spring Integration消息轮询

Spring Integration FileReadingMessageSource使用UseWatchService