public class S3MessageHandler
extends org.springframework.integration.handler.AbstractReplyProducingMessageHandler
AbstractReplyProducingMessageHandler
implementation for the Amazon S3 services.
The implementation is fully based on the TransferManager
and support its upload
,
download
and copy
operations which can be determined by the provided
or evaluated via SpEL expression at runtime S3MessageHandler.Command
.
This AbstractReplyProducingMessageHandler
can behave as a "one-way" (by default) or
"request-reply" component according to the produceReply
constructor argument.
The "one-way" behavior is also blocking, which is achieved with the Transfer.waitForException()
invocation. Consider to use an async upstream hand off if this blocking behavior isn't appropriate.
The "request-reply" behavior is async and the Transfer
result from the TransferManager
operation is sent to the AbstractMessageProducingHandler.outputChannel
, assuming the transfer progress observation in the
downstream flow.
The S3ProgressListener
can be supplied to track the transfer progress.
Also the listener can be populated into the returned Transfer
afterwards in the downstream flow.
*
For the upload operation the S3MessageHandler.UploadMetadataProvider
callback can be supplied to populate required
ObjectMetadata
options, as for a single entry, as well as for each file in directory to upload.
For the upload operation the objectAclExpression
can be provided to AmazonS3.setObjectAcl(java.lang.String, java.lang.String, com.amazonaws.services.s3.model.AccessControlList)
after the successful transfer.
The supported SpEL result types are: AccessControlList
or CannedAccessControlList
.
For download operation the payload
must be a File
instance, representing a single file
for downloaded content or directory to download all files from the S3 virtual directory.
An S3 Object key
for upload and download can be determined by the provided
keyExpression
or the File.getName()
is used directly. The former has precedence.
For copy operation all keyExpression
, destinationBucketExpression
and
destinationKeyExpression
are required and must not evaluate to null
.
TransferManager
Modifier and Type | Class and Description |
---|---|
static class |
S3MessageHandler.Command |
static interface |
S3MessageHandler.UploadMetadataProvider
The callback to populate an
ObjectMetadata for upload operation. |
Constructor and Description |
---|
S3MessageHandler(AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression) |
S3MessageHandler(AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression,
boolean produceReply) |
S3MessageHandler(AmazonS3 amazonS3,
java.lang.String bucket) |
S3MessageHandler(AmazonS3 amazonS3,
java.lang.String bucket,
boolean produceReply) |
S3MessageHandler(TransferManager transferManager,
org.springframework.expression.Expression bucketExpression) |
S3MessageHandler(TransferManager transferManager,
org.springframework.expression.Expression bucketExpression,
boolean produceReply) |
S3MessageHandler(TransferManager transferManager,
java.lang.String bucket) |
S3MessageHandler(TransferManager transferManager,
java.lang.String bucket,
boolean produceReply) |
Modifier and Type | Method and Description |
---|---|
protected void |
doInit() |
protected java.lang.Object |
handleRequestMessage(org.springframework.messaging.Message<?> requestMessage) |
void |
setCommand(S3MessageHandler.Command command)
Specify a
S3MessageHandler.Command to perform against TransferManager . |
void |
setCommandExpression(org.springframework.expression.Expression commandExpression)
The SpEL expression to evaluate the command to perform on
TransferManager : upload ,
download or copy . |
void |
setDestinationBucketExpression(org.springframework.expression.Expression destinationBucketExpression)
The SpEL expression to evaluate the target S3 bucket for copy operation.
|
void |
setDestinationKeyExpression(org.springframework.expression.Expression destinationKeyExpression)
The SpEL expression to evaluate the target S3 key for copy operation.
|
void |
setKeyExpression(org.springframework.expression.Expression keyExpression)
The SpEL expression to evaluate S3 object key at runtime against
requestMessage . |
void |
setObjectAclExpression(org.springframework.expression.Expression objectAclExpression)
The SpEL expression to evaluate S3 object ACL at runtime against
requestMessage
for the upload operation. |
void |
setProgressListener(com.amazonaws.services.s3.transfer.internal.S3ProgressListener s3ProgressListener)
Specify a
S3ProgressListener for upload and download operations. |
void |
setUploadMetadataProvider(S3MessageHandler.UploadMetadataProvider uploadMetadataProvider)
Specify an
ObjectMetadata callback to populate the metadata for upload operation,
e.g. |
doInvokeAdvisedRequestHandler, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReply
getOutputChannel, produceOutput, sendOutputs, setOutputChannel, setOutputChannelName, setSendTimeout, shouldCopyRequestHeaders, shouldSplitOutput
configureMetrics, getActiveCount, getActiveCountLong, getComponentType, getDuration, getErrorCount, getErrorCountLong, getHandleCount, getHandleCountLong, getManagedName, getManagedType, getMaxDuration, getMeanDuration, getMinDuration, getOrder, getStandardDeviationDuration, handleMessage, isCountsEnabled, isLoggingEnabled, isStatsEnabled, reset, setCountsEnabled, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, setStatsEnabled
afterPropertiesSet, extractTypeIfPossible, getApplicationContext, getApplicationContextId, getBeanFactory, getChannelResolver, getComponentName, getConversionService, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setTaskScheduler, toString
public S3MessageHandler(AmazonS3 amazonS3, java.lang.String bucket)
public S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression)
public S3MessageHandler(AmazonS3 amazonS3, java.lang.String bucket, boolean produceReply)
public S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression, boolean produceReply)
public S3MessageHandler(TransferManager transferManager, java.lang.String bucket)
public S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression)
public S3MessageHandler(TransferManager transferManager, java.lang.String bucket, boolean produceReply)
public S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression, boolean produceReply)
public void setKeyExpression(org.springframework.expression.Expression keyExpression)
requestMessage
.keyExpression
- the SpEL expression for S3 key.public void setObjectAclExpression(org.springframework.expression.Expression objectAclExpression)
requestMessage
for the upload
operation.objectAclExpression
- the SpEL expression for S3 object ACL.public void setCommand(S3MessageHandler.Command command)
S3MessageHandler.Command
to perform against TransferManager
.command
- The S3MessageHandler.Command
to use.S3MessageHandler.Command
public void setCommandExpression(org.springframework.expression.Expression commandExpression)
TransferManager
: upload
,
download
or copy
.commandExpression
- the SpEL expression to evaluate the TransferManager
operation.S3MessageHandler.Command
public void setDestinationBucketExpression(org.springframework.expression.Expression destinationBucketExpression)
destinationBucketExpression
- the SpEL expression for destination bucket.TransferManager.copy(String, String, String, String)
public void setDestinationKeyExpression(org.springframework.expression.Expression destinationKeyExpression)
destinationKeyExpression
- the SpEL expression for destination key.TransferManager.copy(String, String, String, String)
public void setProgressListener(com.amazonaws.services.s3.transfer.internal.S3ProgressListener s3ProgressListener)
S3ProgressListener
for upload and download operations.s3ProgressListener
- the S3ProgressListener
to use.public void setUploadMetadataProvider(S3MessageHandler.UploadMetadataProvider uploadMetadataProvider)
ObjectMetadata
callback to populate the metadata for upload operation,
e.g. Content-MD5
, Content-Type
or any other required options.uploadMetadataProvider
- the S3MessageHandler.UploadMetadataProvider
to use for upload.protected void doInit()
doInit
in class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
protected java.lang.Object handleRequestMessage(org.springframework.messaging.Message<?> requestMessage)
handleRequestMessage
in class org.springframework.integration.handler.AbstractReplyProducingMessageHandler