Class S3MessageHandler
- All Implemented Interfaces:
org.reactivestreams.Subscriber<org.springframework.messaging.Message<?>>,org.springframework.beans.factory.Aware,org.springframework.beans.factory.BeanClassLoaderAware,org.springframework.beans.factory.BeanFactoryAware,org.springframework.beans.factory.BeanNameAware,org.springframework.beans.factory.DisposableBean,org.springframework.beans.factory.InitializingBean,org.springframework.context.ApplicationContextAware,org.springframework.core.Ordered,org.springframework.integration.context.ExpressionCapable,org.springframework.integration.context.Orderable,org.springframework.integration.core.MessageProducer,org.springframework.integration.handler.HeaderPropagationAware,org.springframework.integration.IntegrationPattern,org.springframework.integration.support.context.NamedComponent,org.springframework.integration.support.management.IntegrationManagement,org.springframework.integration.support.management.TrackableComponent,org.springframework.messaging.MessageHandler,reactor.core.CoreSubscriber<org.springframework.messaging.Message<?>>
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.getOutputChannel(), 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. If the context of the requestMessage is important in the
progressChanged event, it is recommended to use a
S3MessageHandler.MessageS3ProgressListener implementation instead. *
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.
- Author:
- Artem Bilan, John Logan
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumTheS3MessageHandlermode.static interfacestatic interfaceThe callback to populate anObjectMetadatafor upload operation.Nested classes/interfaces inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
org.springframework.integration.handler.AbstractReplyProducingMessageHandler.RequestHandlerNested classes/interfaces inherited from interface org.springframework.integration.support.management.IntegrationManagement
org.springframework.integration.support.management.IntegrationManagement.ManagementOverrides -
Field Summary
Fields inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
messagingTemplateFields inherited from class org.springframework.integration.context.IntegrationObjectSupport
EXPRESSION_PARSER, loggerFields inherited from interface org.springframework.integration.support.management.IntegrationManagement
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAMEFields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE -
Constructor Summary
ConstructorsConstructorDescriptionS3MessageHandler(AmazonS3 amazonS3, String bucket) S3MessageHandler(AmazonS3 amazonS3, String bucket, boolean produceReply) S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression) S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression, boolean produceReply) S3MessageHandler(TransferManager transferManager, String bucket) S3MessageHandler(TransferManager transferManager, String bucket, boolean produceReply) S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression) S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression, boolean produceReply) -
Method Summary
Modifier and TypeMethodDescriptionprotected voiddoInit()protected ObjecthandleRequestMessage(org.springframework.messaging.Message<?> requestMessage) voidsetCommand(S3MessageHandler.Command command) Specify aS3MessageHandler.Commandto perform againstTransferManager.voidsetCommandExpression(org.springframework.expression.Expression commandExpression) The SpEL expression to evaluate the command to perform onTransferManager:upload,downloadorcopy.voidsetDestinationBucketExpression(org.springframework.expression.Expression destinationBucketExpression) The SpEL expression to evaluate the target S3 bucket for copy operation.voidsetDestinationKeyExpression(org.springframework.expression.Expression destinationKeyExpression) The SpEL expression to evaluate the target S3 key for copy operation.voidsetKeyExpression(org.springframework.expression.Expression keyExpression) The SpEL expression to evaluate S3 object key at runtime againstrequestMessage.voidsetObjectAclExpression(org.springframework.expression.Expression objectAclExpression) The SpEL expression to evaluate S3 object ACL at runtime againstrequestMessagefor theuploadoperation.voidsetProgressListener(S3ProgressListener s3ProgressListener) Specify aS3ProgressListenerfor upload and download operations.voidsetResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver) Specify aResourceIdResolverto resolve logical bucket names to physical resource ids.voidsetUploadMetadataProvider(S3MessageHandler.UploadMetadataProvider uploadMetadataProvider) Specify anObjectMetadatacallback to populate the metadata for upload operation, e.g.Methods inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
doInvokeAdvisedRequestHandler, getBeanClassLoader, getIntegrationPatternType, getRequiresReply, handleMessageInternal, hasAdviceChain, onInit, setAdviceChain, setBeanClassLoader, setRequiresReplyMethods inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler
addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, setSendTimeout, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeadersMethods inherited from class org.springframework.integration.handler.AbstractMessageHandler
handleMessage, onComplete, onError, onNext, onSubscribeMethods inherited from class org.springframework.integration.handler.MessageHandlerSupport
buildSendTimer, destroy, getComponentType, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrackMethods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface reactor.core.CoreSubscriber
currentContextMethods inherited from interface org.springframework.integration.support.management.IntegrationManagement
getThisAsMethods inherited from interface org.springframework.integration.support.context.NamedComponent
getBeanName, getComponentName
-
Constructor Details
-
S3MessageHandler
-
S3MessageHandler
public S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression) -
S3MessageHandler
-
S3MessageHandler
public S3MessageHandler(AmazonS3 amazonS3, org.springframework.expression.Expression bucketExpression, boolean produceReply) -
S3MessageHandler
-
S3MessageHandler
public S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression) -
S3MessageHandler
-
S3MessageHandler
public S3MessageHandler(TransferManager transferManager, org.springframework.expression.Expression bucketExpression, boolean produceReply)
-
-
Method Details
-
setKeyExpression
public void setKeyExpression(org.springframework.expression.Expression keyExpression) The SpEL expression to evaluate S3 object key at runtime againstrequestMessage.- Parameters:
keyExpression- the SpEL expression for S3 key.
-
setObjectAclExpression
public void setObjectAclExpression(org.springframework.expression.Expression objectAclExpression) The SpEL expression to evaluate S3 object ACL at runtime againstrequestMessagefor theuploadoperation.- Parameters:
objectAclExpression- the SpEL expression for S3 object ACL.
-
setCommand
Specify aS3MessageHandler.Commandto perform againstTransferManager.- Parameters:
command- TheS3MessageHandler.Commandto use.- See Also:
-
setCommandExpression
public void setCommandExpression(org.springframework.expression.Expression commandExpression) The SpEL expression to evaluate the command to perform onTransferManager:upload,downloadorcopy.- Parameters:
commandExpression- the SpEL expression to evaluate theTransferManageroperation.- See Also:
-
setDestinationBucketExpression
public void setDestinationBucketExpression(org.springframework.expression.Expression destinationBucketExpression) The SpEL expression to evaluate the target S3 bucket for copy operation.- Parameters:
destinationBucketExpression- the SpEL expression for destination bucket.- See Also:
-
setDestinationKeyExpression
public void setDestinationKeyExpression(org.springframework.expression.Expression destinationKeyExpression) The SpEL expression to evaluate the target S3 key for copy operation.- Parameters:
destinationKeyExpression- the SpEL expression for destination key.- See Also:
-
setProgressListener
Specify aS3ProgressListenerfor upload and download operations.- Parameters:
s3ProgressListener- theS3ProgressListenerto use.- See Also:
-
setUploadMetadataProvider
public void setUploadMetadataProvider(S3MessageHandler.UploadMetadataProvider uploadMetadataProvider) Specify anObjectMetadatacallback to populate the metadata for upload operation, e.g.Content-MD5,Content-Typeor any other required options.- Parameters:
uploadMetadataProvider- theS3MessageHandler.UploadMetadataProviderto use for upload.
-
setResourceIdResolver
public void setResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver) Specify aResourceIdResolverto resolve logical bucket names to physical resource ids.- Parameters:
resourceIdResolver- theResourceIdResolverto use.
-
doInit
protected void doInit()- Overrides:
doInitin classorg.springframework.integration.handler.AbstractReplyProducingMessageHandler
-
handleRequestMessage
- Specified by:
handleRequestMessagein classorg.springframework.integration.handler.AbstractReplyProducingMessageHandler
-