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
The
S3MessageHandler mode. |
static interface |
S3MessageHandler.UploadMetadataProvider
The callback to populate an
ObjectMetadata for upload operation. |
messagingTemplateEXPRESSION_PARSER, logger| Constructor and Description |
|---|
S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression) |
S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression,
boolean produceReply) |
S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
java.lang.String bucket) |
S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
java.lang.String bucket,
boolean produceReply) |
S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
org.springframework.expression.Expression bucketExpression) |
S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
org.springframework.expression.Expression bucketExpression,
boolean produceReply) |
S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
java.lang.String bucket) |
S3MessageHandler(com.amazonaws.services.s3.transfer.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 |
setResourceIdResolver(org.springframework.cloud.aws.core.env.ResourceIdResolver resourceIdResolver)
Specify a
ResourceIdResolver to resolve logical bucket names to physical resource ids. |
void |
setUploadMetadataProvider(S3MessageHandler.UploadMetadataProvider uploadMetadataProvider)
Specify an
ObjectMetadata callback to populate the metadata for upload operation,
e.g. |
doInvokeAdvisedRequestHandler, getRequiresReply, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReplyaddNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeadersconfigureMetrics, getActiveCount, getActiveCountLong, getComponentType, getDuration, getErrorCount, getErrorCountLong, getHandleCount, getHandleCountLong, getManagedName, getManagedType, getMaxDuration, getMeanDuration, getMinDuration, getOrder, getOverrides, getStandardDeviationDuration, handleMessage, isCountsEnabled, isLoggingEnabled, isStatsEnabled, onComplete, onError, onNext, onSubscribe, registerMetricsCaptor, reset, setCountsEnabled, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, setStatsEnabledafterPropertiesSet, extractTypeIfPossible, getApplicationContext, getApplicationContextId, getBeanFactory, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
java.lang.String bucket)
public S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression)
public S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
java.lang.String bucket,
boolean produceReply)
public S3MessageHandler(com.amazonaws.services.s3.AmazonS3 amazonS3,
org.springframework.expression.Expression bucketExpression,
boolean produceReply)
public S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
java.lang.String bucket)
public S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
org.springframework.expression.Expression bucketExpression)
public S3MessageHandler(com.amazonaws.services.s3.transfer.TransferManager transferManager,
java.lang.String bucket,
boolean produceReply)
public S3MessageHandler(com.amazonaws.services.s3.transfer.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.Commandpublic void setCommandExpression(org.springframework.expression.Expression commandExpression)
TransferManager: upload,
download or copy.commandExpression - the SpEL expression to evaluate the TransferManager operation.S3MessageHandler.Commandpublic 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.public void setResourceIdResolver(org.springframework.cloud.aws.core.env.ResourceIdResolver resourceIdResolver)
ResourceIdResolver to resolve logical bucket names to physical resource ids.resourceIdResolver - the ResourceIdResolver to use.protected void doInit()
doInit in class org.springframework.integration.handler.AbstractReplyProducingMessageHandlerprotected java.lang.Object handleRequestMessage(org.springframework.messaging.Message<?> requestMessage)
handleRequestMessage in class org.springframework.integration.handler.AbstractReplyProducingMessageHandler