Class MessageSendingPipe

All Implemented Interfaces:
HasSender, HasTransactionAttribute, IConfigurable, IConfigurationAware, IForwardTarget, INamedObject, IPipe, IScopeProvider, IWithParameters, EventThrowing, HasStatistics, org.springframework.beans.factory.Aware, org.springframework.context.ApplicationContextAware
Direct Known Subclasses:
IteratingPipe, MailSenderPipe, SenderPipe

public class MessageSendingPipe extends FixedForwardPipe implements HasSender
Sends a message using a sender and optionally receives a reply from the same sender, or from a listener.
Author:
Gerrit van Brakel
Parameters
any parameters defined on the pipe will be handed to the sender, if this is a ISenderWithParameters
Specific parameters
stubFilename will not be handed to the sender and it is used at runtime instead of the stubFilename specified by the attribute. A lookup of the file for this stubFilename will be done at runtime, while the file for the stubFilename specified as an attribute will be done at configuration time.
  • Field Details

  • Constructor Details

    • MessageSendingPipe

      public MessageSendingPipe()
  • Method Details

    • configure

      public void configure() throws ConfigurationException
      Description copied from class: FixedForwardPipe
      checks for correct configuration of forward
      Specified by:
      configure in interface IConfigurable
      Specified by:
      configure in interface IPipe
      Overrides:
      configure in class FixedForwardPipe
      Throws:
      ConfigurationException
    • propagateName

      protected void propagateName()
    • setName

      public void setName(String name)
      Description copied from class: AbstractPipe
      The functional name of this pipe. Can be referenced by the path attribute of a PipeForward.
      Specified by:
      setName in interface INamedObject
      Overrides:
      setName in class AbstractPipe
    • preserve

      protected void preserve(@Nonnull Message input) throws PipeRunException
      Call Message.preserve() so it can be consumed multiple times, and wrap potential IOException in a PipeRunException.
      Parameters:
      input - The Message to be preserved.
      Throws:
      PipeRunException - If an IOException is thrown from Message.preserve(), wrap and rethrow it in a PipeRunException.
    • doPipe

      public PipeRunResult doPipe(@Nonnull Message input, @Nonnull PipeLineSession session) throws PipeRunException
      Description copied from interface: IPipe
      This is where the action takes place. Pipes may only throw a PipeRunException, to be handled by the caller of this object. Implementations must either consume the message, or pass it on to the next Pipe in the PipeRunResult. If the result of the Pipe does not depend on the input, like for the FixedResultPipe, the Pipe can schedule the input to be closed at session exit, by calling Message.closeOnCloseOf(PipeLineSession, String) This allows the previous Pipe to release any resources (e.g. connections) that it might have kept open until the message was consumed. Doing so avoids connections leaking from pools, while it enables efficient streaming processing of data while it is being read from a stream.
      Specified by:
      doPipe in interface IPipe
      Throws:
      PipeRunException
    • sendMessage

      protected PipeRunResult sendMessage(Message input, PipeLineSession session, ISender sender, Map<String,Object> threadContext) throws SenderException, TimeoutException, InterruptedException, IOException
      Throws:
      SenderException
      TimeoutException
      InterruptedException
      IOException
    • increaseRetryIntervalAndWait

      public int increaseRetryIntervalAndWait(PipeLineSession session, int retryInterval, String description) throws InterruptedException
      Throws:
      InterruptedException
    • start

      public void start() throws PipeStartException
      Description copied from interface: IPipe
      Perform necessary action to start the pipe. This method is executed after the IPipe.configure() method, for each start and stop command of the adapter.
      Specified by:
      start in interface IPipe
      Overrides:
      start in class AbstractPipe
      Throws:
      PipeStartException
    • stop

      public void stop()
      Description copied from interface: IPipe
      Perform necessary actions to stop the Pipe.
      For instance, closing JMS connections, DBMS connections etc.
      Specified by:
      stop in interface IPipe
      Overrides:
      stop in class AbstractPipe
    • sizeStatisticsEnabled

      public boolean sizeStatisticsEnabled()
      Specified by:
      sizeStatisticsEnabled in interface IPipe
      Overrides:
      sizeStatisticsEnabled in class AbstractPipe
    • consumesSessionVariable

      public boolean consumesSessionVariable(String sessionKey)
      Description copied from interface: IPipe
      returns true if the pipe or one of its children use the named session variable. Callers can use this to determine if a message needs to be preserved.
      Specified by:
      consumesSessionVariable in interface IPipe
      Overrides:
      consumesSessionVariable in class AbstractPipe
    • setSender

      protected void setSender(ISender sender)
      The sender that should send the message
    • setListener

      protected void setListener(ICorrelatedPullingListener listener)
      Listener for responses on the request sent
    • setMessageLog

      public void setMessageLog(ITransactionalStorage messageLog)
      log of all messages sent
    • setInputValidator

      public void setInputValidator(IValidator inputValidator)
      specification of Pipe to validate request messages, or request and response message if configured as mixed mode validator
    • setOutputValidator

      public void setOutputValidator(IValidator outputValidator)
      specification of Pipe to validate response messages
    • setInputWrapper

      public void setInputWrapper(IWrapperPipe inputWrapper)
      specification of Pipe to wrap or unwrap request messages
    • setOutputWrapper

      public void setOutputWrapper(IWrapperPipe outputWrapper)
      specification of Pipe to wrap or unwrap response messages
    • setLinkMethod

      public void setLinkMethod(MessageSendingPipe.LinkMethod method)
      For asynchronous communication, the server side may either use the messageID or the correlationID in the correlationID field of the reply message. Use this property to set the behaviour of the reply-listener.
      Default value
      CORRELATIONID
    • setCorrelationIDStyleSheet

      public void setCorrelationIDStyleSheet(String string)
      Stylesheet to extract correlationid from message
    • setCorrelationIDXPath

      public void setCorrelationIDXPath(String string)
      XPath expression to extract correlationid from message
    • setCorrelationIDNamespaceDefs

      public void setCorrelationIDNamespaceDefs(String correlationIDNamespaceDefs)
      Namespace defintions for correlationIDXPath. Must be in the form of a comma or space separated list of prefix=namespaceUri-definitions
    • setCorrelationIDSessionKey

      public void setCorrelationIDSessionKey(String string)
      Key of a PipelineSession-variable. If specified, the value of the PipelineSession variable is used as input for the XPathExpression or stylesheet, instead of the current input message
    • setLabelStyleSheet

      public void setLabelStyleSheet(String string)
      Stylesheet to extract label from message
    • setLabelXPath

      public void setLabelXPath(String string)
      XPath expression to extract label from message
    • setLabelNamespaceDefs

      public void setLabelNamespaceDefs(String labelXNamespaceDefs)
      Namespace defintions for labelXPath. Must be in the form of a comma or space separated list of prefix=namespaceUri-definitions
    • setAuditTrailXPath

      public void setAuditTrailXPath(String string)
      XPath expression to extract audit trail from message
    • setAuditTrailNamespaceDefs

      public void setAuditTrailNamespaceDefs(String auditTrailNamespaceDefs)
      Namespace defintions for auditTrailXPath. Must be in the form of a comma or space separated list of prefix=namespaceUri-definitions
    • setAuditTrailSessionKey

      public void setAuditTrailSessionKey(String string)
      Key of a PipelineSession-variable. If specified, the value of the PipelineSession variable is used as audit trail (instead of the default 'no audit trail)
    • setUseInputForExtract

      public void setUseInputForExtract(boolean b)
      If set true, the input of the Pipe is used to extract audit trail, correlationid and label (instead of the wrapped input)
      Default value
      true
    • setHideRegex

      public void setHideRegex(String hideRegex)
      Next to common usage in AbstractPipe, also strings in the error/logstore are masked
      Overrides:
      setHideRegex in class AbstractPipe
    • setHideMethod

      public void setHideMethod(IMessageBrowser.HideMethod hideMethod)
      (Only used when hideRegex is not empty and only applies to error/logstore)
      Default value
      all
    • setCheckXmlWellFormed

      public void setCheckXmlWellFormed(boolean b)
      If set true, the XML Well-Formedness of the result is checked
      Default value
      false
    • setCheckRootTag

      public void setCheckRootTag(String s)
      If set, besides the XML Well-Formedness the root element of the result is checked to be equal to the value set
    • setResultOnTimeOut

      public void setResultOnTimeOut(String newResultOnTimeOut)
      The message (e.g. 'receiver timed out') that is returned when the time listening for a reply message exceeds the timeout, or in other situations no reply message is received.
    • setMaxRetries

      public void setMaxRetries(int i)
      The number of times a processing attempt is retried after a timeout or an exception is caught or after an incorrect reply is received (see also retryXPath)
      Default value
      0
    • setRetryMinInterval

      public void setRetryMinInterval(int i)
      The starting number of seconds waited after an unsuccessful processing attempt before another processing attempt is made. Each next retry this interval is doubled with a upper limit of retryMaxInterval
      Default value
      1
    • setRetryMaxInterval

      public void setRetryMaxInterval(int i)
      The maximum number of seconds waited after an unsuccessful processing attempt before another processing attempt is made
      Default value
      600
    • setRetryXPath

      public void setRetryXPath(String string)
      XPath expression evaluated on each technical successful reply. Retry is done if condition returns true
    • setRetryNamespaceDefs

      public void setRetryNamespaceDefs(String retryNamespaceDefs)
      Namespace defintions for retryXPath. Must be in the form of a comma or space separated list of prefix=namespaceUri-definitions
    • setPresumedTimeOutInterval

      public void setPresumedTimeOutInterval(int i)
      If the previous call was a timeout, the maximum time in seconds after this timeout to presume the current call is also a timeout.
      Default value
      0
    • setStubFilename

      public void setStubFilename(String filename)
      If set, the pipe returns a message from a file, instead of doing the regular process
    • setTimeoutOnResult

      public void setTimeoutOnResult(String string)
      If not empty, a TimeoutException is thrown when the result equals this value (for testing purposes only)
    • setTimeOutOnResult

      @Deprecated(since="8.1") @ConfigurationWarning("Use attribute timeoutOnResult instead") public void setTimeOutOnResult(String string)
      Deprecated.
      If not empty, a TimeoutException is thrown when the result equals this value (for testing purposes only)
    • setExceptionOnResult

      public void setExceptionOnResult(String string)
      If not empty, a PipeRunException is thrown when the result equals this value (for testing purposes only)
    • getLinkMethod

      public MessageSendingPipe.LinkMethod getLinkMethod()
    • getCorrelationIDStyleSheet

      public String getCorrelationIDStyleSheet()
    • getCorrelationIDXPath

      public String getCorrelationIDXPath()
    • getCorrelationIDNamespaceDefs

      public String getCorrelationIDNamespaceDefs()
    • getCorrelationIDSessionKey

      public String getCorrelationIDSessionKey()
    • getLabelStyleSheet

      public String getLabelStyleSheet()
    • getLabelXPath

      public String getLabelXPath()
    • getLabelNamespaceDefs

      public String getLabelNamespaceDefs()
    • getAuditTrailSessionKey

      public String getAuditTrailSessionKey()
    • getAuditTrailXPath

      public String getAuditTrailXPath()
    • getAuditTrailNamespaceDefs

      public String getAuditTrailNamespaceDefs()
    • isUseInputForExtract

      public boolean isUseInputForExtract()
    • getHideMethod

      public IMessageBrowser.HideMethod getHideMethod()
    • isCheckXmlWellFormed

      public boolean isCheckXmlWellFormed()
    • getCheckRootTag

      public String getCheckRootTag()
    • getResultOnTimeOut

      public String getResultOnTimeOut()
    • getMaxRetries

      public int getMaxRetries()
    • getRetryMinInterval

      public int getRetryMinInterval()
    • getRetryMaxInterval

      public int getRetryMaxInterval()
    • getRetryXPath

      public String getRetryXPath()
    • getRetryNamespaceDefs

      public String getRetryNamespaceDefs()
    • getPresumedTimeOutInterval

      public int getPresumedTimeOutInterval()
    • getStubFilename

      public String getStubFilename()
    • getTimeoutOnResult

      public String getTimeoutOnResult()
    • getExceptionOnResult

      public String getExceptionOnResult()
    • getSender

      public ISender getSender()
      Specified by:
      getSender in interface HasSender
    • getListener

      public ICorrelatedPullingListener getListener()
    • getMessageLog

      public ITransactionalStorage getMessageLog()
    • getInputValidator

      public IValidator getInputValidator()
    • getOutputValidator

      public IValidator getOutputValidator()
    • getInputWrapper

      public IWrapperPipe getInputWrapper()
    • getOutputWrapper

      public IWrapperPipe getOutputWrapper()
    • setPipeProcessor

      public void setPipeProcessor(PipeProcessor pipeProcessor)
    • setListenerProcessor

      public void setListenerProcessor(ListenerProcessor listenerProcessor)
    • setConfigurationMetrics

      public void setConfigurationMetrics(MetricsInitializer configurationMetrics)
    • getConfigurationMetrics

      public MetricsInitializer getConfigurationMetrics()