0
votes

I am facing one issue in both int-aws:s3-outbound-gateway and int-aws:s3-outbound-channel-adapter . The issue is, Suppose if i don't have the bucket access permission which is already configured as a destination bucket the adapter should throw run time error in the console but I am not getting any error in the console and files are not moved to the respective destination. Could you please advice on this

     <int-aws:s3-outbound-channel-adapter 
        id="moverId"
        channel="ChannelGateway" 
        transfer-manager="tf"
        bucket-expression="bucketName"
        key-expression="headers.file_name"
        command="UPLOAD">
    <int-aws:request-handler-advice-chain>
        <ref bean="retryAdvice" />
    </int-aws:request-handler-advice-chain>
</int-aws:s3-outbound-channel-adapter>
1

1 Answers

0
votes

You don't get any errors because such an upload is an async operation.

The S3MessageHandler is fully based on the AWS S3 TransferManager. And when we upload the file into the remote bucket it is done by this operation:

/**
 * <p>
 * Schedules a new transfer to upload data to Amazon S3. This method is
 * non-blocking and returns immediately (i.e. before the upload has
 * finished).
 * </p>
 * <p>
 * Use the returned <code>Upload</code> object to query the progress of the
 * transfer, add listeners for progress events, and wait for the upload to
 * complete.
 * </p>
 * <p>
 * If resources are available, the upload will begin immediately. Otherwise,
 * the upload is scheduled and started as soon as resources become
 * available.
 * </p>
 * <p>
 * If you are uploading <a href="http://aws.amazon.com/kms/">AWS
 * KMS</a>-encrypted objects, you need to specify the correct region of the
 * bucket on your client and configure AWS Signature Version 4 for added
 * security. For more information on how to do this, see
 * http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#
 * specify-signature-version
 * </p>
 *
 * @param putObjectRequest
 *            The request containing all the parameters for the upload.
 * @param progressListener
 *            An optional callback listener to receive the progress of the
 *            upload.
 *
 * @return A new <code>Upload</code> object to use to check the state of the
 *         upload, listen for progress notifications, and otherwise manage
 *         the upload.
 *
 * @throws AmazonClientException
 *             If any errors are encountered in the client while making the
 *             request or handling the response.
 * @throws AmazonServiceException
 *             If any errors occurred in Amazon S3 while processing the
 *             request.
 */
public Upload upload(final PutObjectRequest putObjectRequest,
        final S3ProgressListener progressListener)

Pay attention to the second argument if this method: the S3MessageHandler provides such a hook for your use case:

/**
 * Specify a {@link S3ProgressListener} for upload and download operations.
 * @param s3ProgressListener the {@link S3ProgressListener} to use.
 * @see MessageS3ProgressListener
 */
public void setProgressListener(S3ProgressListener s3ProgressListener) {

And you need to track there a progressChanged(ProgressEvent progressEvent) for an appropriate ProgressEventType.