Class JmsMessageSender
- All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean,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][¶m-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:
| 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:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.springframework.ws.transport.WebServiceMessageSender
WebServiceMessageSender.DestinationDescriptor, WebServiceMessageSender.DestinationPolicy<D extends WebServiceMessageSender.DestinationDescriptor>, WebServiceMessageSender.UriSource -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longDefault timeout for receive operations: -1 indicates a blocking receive without timeout.static final StringDefault encoding used to read from and write toTextMessagemessages.Fields inherited from class org.springframework.jms.support.destination.JmsDestinationAccessor
RECEIVE_TIMEOUT_INDEFINITE_WAIT, RECEIVE_TIMEOUT_NO_WAITFields inherited from class org.springframework.jms.support.JmsAccessor
logger -
Constructor Summary
ConstructorsConstructorDescriptionCreate a newJmsMessageSenderJmsMessageSender(jakarta.jms.ConnectionFactory connectionFactory) Create a newJmsMessageSender, given a ConnectionFactory. -
Method Summary
Modifier and TypeMethodDescriptioncreateConnection(URI uri) Create a newWebServiceConnectionto the specified URI.protected Predicate<JmsDestinationDescriptor>defaultChecks(WebServiceMessageSender.UriSource uriSource) Return the default checks to apply for the givenWebServiceMessageSender.UriSource.voidsetDestinationPolicy(WebServiceMessageSender.DestinationPolicy<JmsDestinationDescriptor> destinationPolicy) Set a customWebServiceMessageSender.DestinationPolicyto compose with the sender's default checks.voidsetPostProcessor(org.springframework.jms.core.MessagePostProcessor postProcessor) Sets the optionalMessagePostProcessorto further modify outgoing messages after the XML contents has been set.voidsetReceiveTimeout(long receiveTimeout) Set the timeout to use for receive calls.voidsetTextMessageEncoding(String textMessageEncoding) Sets the encoding used to read fromTextMessagemessages.booleansupports(URI uri, WebServiceMessageSender.UriSource uriSource) Whether this sender supports the given URI for the suppliedWebServiceMessageSender.UriSource.Methods inherited from class org.springframework.jms.support.destination.JmsDestinationAccessor
getDestinationResolver, isPubSubDomain, receiveFromConsumer, resolveDestinationName, setDestinationResolver, setPubSubDomainMethods inherited from class org.springframework.jms.support.JmsAccessor
afterPropertiesSet, convertJmsAccessException, createConnection, createSession, getConnectionFactory, getSessionAcknowledgeMode, isClientAcknowledge, isSessionTransacted, obtainConnectionFactory, setConnectionFactory, setSessionAcknowledgeMode, setSessionAcknowledgeModeName, setSessionTransactedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.ws.transport.WebServiceMessageSender
supports
-
Field Details
-
DEFAULT_RECEIVE_TIMEOUT
public static final long DEFAULT_RECEIVE_TIMEOUTDefault timeout for receive operations: -1 indicates a blocking receive without timeout.- See Also:
-
DEFAULT_TEXT_MESSAGE_ENCODING
Default encoding used to read from and write toTextMessagemessages.- See Also:
-
-
Constructor Details
-
JmsMessageSender
public JmsMessageSender()Create a newJmsMessageSenderNote: 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 newJmsMessageSender, given a ConnectionFactory.- Parameters:
connectionFactory- the ConnectionFactory to obtain Connections from
-
-
Method Details
-
setReceiveTimeout
public void setReceiveTimeout(long receiveTimeout) Set the timeout to use for receive calls. The default is -1, which means no timeout.- See Also:
-
MessageConsumer.receive(long)
-
setTextMessageEncoding
Sets the encoding used to read fromTextMessagemessages. Defaults toUTF-8. -
setPostProcessor
public void setPostProcessor(org.springframework.jms.core.MessagePostProcessor postProcessor) Sets the optionalMessagePostProcessorto further modify outgoing messages after the XML contents has been set. -
setDestinationPolicy
public void setDestinationPolicy(WebServiceMessageSender.DestinationPolicy<JmsDestinationDescriptor> destinationPolicy) Set a customWebServiceMessageSender.DestinationPolicyto compose with the sender's default checks. When unset, only default checks apply.- Parameters:
destinationPolicy- the policy to apply- Since:
- 3.1.9
-
createConnection
Description copied from interface:WebServiceMessageSenderCreate a newWebServiceConnectionto the specified URI.- Specified by:
createConnectionin interfaceWebServiceMessageSender- Parameters:
uri- the URI to open a connection to- Returns:
- the new connection
- Throws:
IOException- in case of I/O errors
-
supports
Description copied from interface:WebServiceMessageSenderWhether this sender supports the given URI for the suppliedWebServiceMessageSender.UriSource. Implementations typically apply the same transport rules forWebServiceMessageSender.UriSource.APPLICATIONas for legacyWebServiceMessageSender.supports(URI), and add stricter checks forWebServiceMessageSender.UriSource.REMOTE.- Specified by:
supportsin interfaceWebServiceMessageSender- Parameters:
uri- the URI to be checkeduriSource- whether the URI is application-controlled or remote-influenced- Returns:
trueif this sender accepts the URI for that source
-
defaultChecks
protected Predicate<JmsDestinationDescriptor> defaultChecks(WebServiceMessageSender.UriSource uriSource) Return the default checks to apply for the givenWebServiceMessageSender.UriSource.- Returns:
- the default checks to apply
- Since:
- 3.1.9
-