Class JmsMessageSender

java.lang.Object
org.springframework.jms.support.JmsAccessor
org.springframework.jms.support.destination.JmsDestinationAccessor
org.springframework.ws.transport.jms.JmsMessageSender
All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean, WebServiceMessageSender

public class JmsMessageSender extends org.springframework.jms.support.destination.JmsDestinationAccessor implements WebServiceMessageSender
WebServiceMessageSender implementation that uses JMS Messages. Requires a JMS ConnectionFactory to operate.

This message sender supports URI's of the following format:

jms:<destination>[?param-name=param-value][&param-name=param-value]
where the characters :, ?, and & stand for themselves. The <destination> represents the name of the Queue or Topic that will be resolved by the destination resolver. Valid param-name include:
Parameter Names
param-name Description
deliveryMode Indicates whether the request message is persistent or not. This may be PERSISTENT or NON_PERSISTENT. See MessageProducer.setDeliveryMode(int)
messageType The message type. This may be BINARY_MESSAGE (the default) or TEXT_MESSAGE
priority The JMS priority (0-9) associated with the request message. See MessageProducer.setPriority(int)
replyToName The name of the destination to which the response message must be sent, that will be resolved by the destination resolver
timeToLive The lifetime, in milliseconds, of the request message. See MessageProducer.setTimeToLive(long)

If the replyToName is not set, a temporary queue is used.

This class uses BytesMessage messages by default, but can be configured to send TextMessage messages instead. Note that BytesMessages are preferred, since TextMessages do not support attachments and character encodings reliably.

Some examples of JMS URIs are:

jms:SomeQueue
jms:SomeTopic?priority=3&deliveryMode=NON_PERSISTENT
jms:RequestQueue?replyToName=ResponseQueueName
jms:Queue?messageType=TEXT_MESSAGE

For WebServiceMessageSender.UriSource.APPLICATION, default checks accept any jms: URI. For WebServiceMessageSender.UriSource.REMOTE, default checks reject destination and replyToName fragments that resemble JNDI/LDAP/RMI-style indirection (see JmsDestinationDescriptor.containsSuspiciousJmsNameIndirection()). Use a WebServiceMessageSender.DestinationPolicy for explicit allowlists, resolver-specific rules, or to tune validation when legitimate destination names contain such substrings.

Since:
1.5.0
See Also:
  • Field Details

    • DEFAULT_RECEIVE_TIMEOUT

      public static final long DEFAULT_RECEIVE_TIMEOUT
      Default timeout for receive operations: -1 indicates a blocking receive without timeout.
      See Also:
    • DEFAULT_TEXT_MESSAGE_ENCODING

      public static final String DEFAULT_TEXT_MESSAGE_ENCODING
      Default encoding used to read from and write to TextMessage messages.
      See Also:
  • Constructor Details

    • JmsMessageSender

      public JmsMessageSender()
      Create a new JmsMessageSender

      Note: The ConnectionFactory has to be set before using the instance. This constructor can be used to prepare a JmsTemplate via a BeanFactory, typically setting the ConnectionFactory via JmsAccessor.setConnectionFactory(ConnectionFactory).

      See Also:
      • JmsAccessor.setConnectionFactory(ConnectionFactory)
    • JmsMessageSender

      public JmsMessageSender(jakarta.jms.ConnectionFactory connectionFactory)
      Create a new JmsMessageSender, given a ConnectionFactory.
      Parameters:
      connectionFactory - the ConnectionFactory to obtain Connections from
  • Method Details