Это невозможно с текущей реализацией object-acl-expression
. Только потому, что он не поддерживает null
для результата оценки:
Object acl = this.objectAclExpression.getValue(this.evaluationContext, requestMessage);
Assert.state(acl instanceof AccessControlList || acl instanceof CannedAccessControlList,
"The 'objectAclExpression' ["
+ this.objectAclExpression.getExpressionString()
+ "] must evaluate to com.amazonaws.services.s3.model.AccessControlList " +
"or must evaluate to com.amazonaws.services.s3.model.CannedAccessControlList. " +
"Gotten: [" + acl + "]");
Конечно, мы можем это исправить, и вы можете задать вопрос по этому вопросу: https://github.com/spring-projects/spring-integration-aws/issues
Между тем в качестве обходного пути я вижу решение на основе S3ProgressListener
, аналогичное тому, что мы делаем внутри:
progressListener = new S3ProgressListener() {
@Override
public void onPersistableTransfer(PersistableTransfer persistableTransfer) {
}
@Override
public void progressChanged(ProgressEvent progressEvent) {
if (ProgressEventType.TRANSFER_COMPLETED_EVENT.equals(progressEvent.getEventType())) {
S3MessageHandler.this.transferManager.getAmazonS3Client().setObjectAcl(theAclRequest);
}
}
};
Только проблема здесь в том, что у вас нет доступа к сообщению в этом progressChanged
контексте ... Я думаю, что это тоже нужно исправить.
Может быть, вы можете просто жить сейчас с CannedAccessControlList.AuthenticatedRead
вместо null
?