Class SnsMessageHandler

java.lang.Object
org.springframework.integration.context.IntegrationObjectSupport
org.springframework.integration.handler.MessageHandlerSupport
org.springframework.integration.handler.AbstractMessageHandler
org.springframework.integration.handler.AbstractMessageProducingHandler
org.springframework.integration.aws.outbound.AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
org.springframework.integration.aws.outbound.SnsMessageHandler
All Implemented Interfaces:
org.reactivestreams.Subscriber<org.springframework.messaging.Message<?>>, org.springframework.beans.factory.Aware, 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<?>>

public class SnsMessageHandler extends AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
The AbstractAwsMessageHandler implementation to send SNS Notifications (AmazonSNSAsync.publishAsync(PublishRequest)) to the provided topicArn (or evaluated at runtime against Message).

The SNS Message subject can be evaluated as a result of subjectExpression.

The algorithm to populate SNS Message body is like:

  • If the payload instanceof PublishRequest it is used as is for publishing.
  • If the bodyExpression is specified, it is used to be evaluated against requestMessage.
  • If the evaluation result (or payload) is instance of SnsBodyBuilder, the SNS Message is built from there and the messageStructure of the PublishRequest is set to json. For the convenience the package org.springframework.integration.aws.support is imported to the AbstractAwsMessageHandler.getEvaluationContext() to allow bypass it for the SnsBodyBuilder from the bodyExpression definition. For example:
     
     String bodyExpression =
     "SnsBodyBuilder.withDefault(payload).forProtocols(payload.substring(0, 140), 'sms')";
     snsMessageHandler.setBodyExpression(spelExpressionParser.parseExpression(bodyExpression));
     
     
  • Otherwise the payload (or the bodyExpression evaluation result) is converted to the String using IntegrationObjectSupport.getConversionService().
Author:
Artem Bilan
See Also:
  • Nested Class Summary

    Nested 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.aws.outbound.AbstractAwsMessageHandler

    DEFAULT_SEND_TIMEOUT

    Fields inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler

    messagingTemplate

    Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport

    EXPRESSION_PARSER, logger

    Fields inherited from interface org.springframework.integration.support.management.IntegrationManagement

    METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME

    Fields inherited from interface org.springframework.core.Ordered

    HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    additionalOnSuccessHeaders(org.springframework.integration.support.AbstractIntegrationMessageBuilder<?> messageBuilder, AmazonWebServiceRequest request, Object result)
     
    protected Future<?>
    handleMessageToAws(org.springframework.messaging.Message<?> message)
     
    protected void
     
    void
    setBodyExpression(org.springframework.expression.Expression bodyExpression)
    The Expression to produce the SNS notification message.
    void
    setResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver)
    Specify a ResourceIdResolver to resolve logical topic names to physical resource ids.
    void
    setSubject(String subject)
     
    void
    setSubjectExpression(org.springframework.expression.Expression subjectExpression)
     
    void
    setTopicArn(String topicArn)
     
    void
    setTopicArnExpression(org.springframework.expression.Expression topicArnExpression)
     

    Methods inherited from class org.springframework.integration.handler.AbstractMessageProducingHandler

    addNotPropagatedHeaders, createOutputMessage, getNotPropagatedHeaders, getOutputChannel, isAsync, messageBuilderForReply, produceOutput, resolveErrorChannel, sendErrorMessage, sendOutput, sendOutputs, setAsync, setNotPropagatedHeaders, setOutputChannel, setOutputChannelName, shouldCopyRequestHeaders, shouldSplitOutput, updateNotPropagatedHeaders

    Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler

    handleMessage, onComplete, onError, onNext, onSubscribe

    Methods inherited from class org.springframework.integration.handler.MessageHandlerSupport

    buildSendTimer, destroy, getComponentType, getIntegrationPatternType, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack

    Methods 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, toString

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface reactor.core.CoreSubscriber

    currentContext

    Methods inherited from interface org.springframework.integration.support.management.IntegrationManagement

    getThisAs

    Methods inherited from interface org.springframework.integration.support.context.NamedComponent

    getBeanName, getComponentName
  • Constructor Details

    • SnsMessageHandler

      public SnsMessageHandler(AmazonSNSAsync amazonSns)
  • Method Details

    • setTopicArn

      public void setTopicArn(String topicArn)
    • setTopicArnExpression

      public void setTopicArnExpression(org.springframework.expression.Expression topicArnExpression)
    • setSubject

      public void setSubject(String subject)
    • setSubjectExpression

      public void setSubjectExpression(org.springframework.expression.Expression subjectExpression)
    • setBodyExpression

      public void setBodyExpression(org.springframework.expression.Expression bodyExpression)
      The Expression to produce the SNS notification message. If it evaluates to the SnsBodyBuilder the messageStructure of the PublishRequest is set to json. Otherwise the IntegrationObjectSupport.getConversionService() is used to convert the evaluation result to the String without setting the messageStructure.
      Parameters:
      bodyExpression - the Expression to produce the SNS notification message.
    • setResourceIdResolver

      public void setResourceIdResolver(io.awspring.cloud.core.env.ResourceIdResolver resourceIdResolver)
      Specify a ResourceIdResolver to resolve logical topic names to physical resource ids.
      Parameters:
      resourceIdResolver - the ResourceIdResolver to use.
    • onInit

      protected void onInit()
      Overrides:
      onInit in class AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
    • handleMessageToAws

      protected Future<?> handleMessageToAws(org.springframework.messaging.Message<?> message)
      Specified by:
      handleMessageToAws in class AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>
    • additionalOnSuccessHeaders

      protected void additionalOnSuccessHeaders(org.springframework.integration.support.AbstractIntegrationMessageBuilder<?> messageBuilder, AmazonWebServiceRequest request, Object result)
      Specified by:
      additionalOnSuccessHeaders in class AbstractAwsMessageHandler<Map<String,MessageAttributeValue>>