2222import javax .jms .Session ;
2323
2424import org .springframework .beans .factory .InitializingBean ;
25- import org .springframework .jms .support . converter . MessageConversionException ;
25+ import org .springframework .jms .JmsException ;
2626import org .springframework .jms .support .converter .MessageConverter ;
2727import org .springframework .jms .support .converter .MessagingMessageConverter ;
2828import org .springframework .jms .support .converter .SimpleMessageConverter ;
2929import org .springframework .messaging .Message ;
3030import org .springframework .messaging .MessagingException ;
31+ import org .springframework .messaging .MessagingExceptionTranslator ;
32+ import org .springframework .messaging .converter .MessageConversionException ;
3133import org .springframework .messaging .core .AbstractMessagingTemplate ;
3234import org .springframework .messaging .core .MessagePostProcessor ;
3335import org .springframework .util .Assert ;
@@ -45,6 +47,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
4547
4648 private MessageConverter jmsMessageConverter = new MessagingMessageConverter ();
4749
50+ private MessagingExceptionTranslator exceptionTranslator = new JmsMessagingExceptionTranslator ();
51+
4852 private String defaultDestinationName ;
4953
5054
@@ -85,6 +89,14 @@ public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
8589 this .jmsMessageConverter = jmsMessageConverter ;
8690 }
8791
92+ /**
93+ * Set the {@link MessagingExceptionTranslator} to use. Default to
94+ * {@link JmsMessagingExceptionTranslator}.
95+ */
96+ public void setExceptionTranslator (MessagingExceptionTranslator exceptionTranslator ) {
97+ this .exceptionTranslator = exceptionTranslator ;
98+ }
99+
88100 /**
89101 * Configure the default destination name to use in send methods that don't have
90102 * a destination argument. If a default destination is not configured, send methods
@@ -271,35 +283,65 @@ public <T> T convertSendAndReceive(String destinationName, Object request, Map<S
271283
272284 @ Override
273285 protected void doSend (Destination destination , Message <?> message ) {
274- this .jmsTemplate .send (destination , createMessageCreator (message ));
286+ try {
287+ this .jmsTemplate .send (destination , createMessageCreator (message ));
288+ }
289+ catch (JmsException ex ) {
290+ throw translateIfNecessary (ex );
291+ }
275292 }
276293
277294 protected void doSend (String destinationName , Message <?> message ) {
278- this .jmsTemplate .send (destinationName , createMessageCreator (message ));
295+ try {
296+ this .jmsTemplate .send (destinationName , createMessageCreator (message ));
297+ }
298+ catch (JmsException ex ) {
299+ throw translateIfNecessary (ex );
300+ }
279301 }
280302
281303 @ Override
282304 protected Message <?> doReceive (Destination destination ) {
283- javax .jms .Message jmsMessage = this .jmsTemplate .receive (destination );
284- return doConvert (jmsMessage );
305+ try {
306+ javax .jms .Message jmsMessage = this .jmsTemplate .receive (destination );
307+ return doConvert (jmsMessage );
308+ }
309+ catch (JmsException ex ) {
310+ throw translateIfNecessary (ex );
311+ }
285312 }
286313
287314 protected Message <?> doReceive (String destinationName ) {
288- javax .jms .Message jmsMessage = this .jmsTemplate .receive (destinationName );
289- return doConvert (jmsMessage );
315+ try {
316+ javax .jms .Message jmsMessage = this .jmsTemplate .receive (destinationName );
317+ return doConvert (jmsMessage );
318+ }
319+ catch (JmsException ex ) {
320+ throw translateIfNecessary (ex );
321+ }
290322 }
291323
292324 @ Override
293325 protected Message <?> doSendAndReceive (Destination destination , Message <?> requestMessage ) {
294- javax .jms .Message jmsMessage = this .jmsTemplate
295- .sendAndReceive (destination , createMessageCreator (requestMessage ));
296- return doConvert (jmsMessage );
326+ try {
327+ javax .jms .Message jmsMessage = this .jmsTemplate
328+ .sendAndReceive (destination , createMessageCreator (requestMessage ));
329+ return doConvert (jmsMessage );
330+ }
331+ catch (JmsException ex ) {
332+ throw translateIfNecessary (ex );
333+ }
297334 }
298335
299336 protected Message <?> doSendAndReceive (String destinationName , Message <?> requestMessage ) {
300- javax .jms .Message jmsMessage = this .jmsTemplate
301- .sendAndReceive (destinationName , createMessageCreator (requestMessage ));
302- return doConvert (jmsMessage );
337+ try {
338+ javax .jms .Message jmsMessage = this .jmsTemplate
339+ .sendAndReceive (destinationName , createMessageCreator (requestMessage ));
340+ return doConvert (jmsMessage );
341+ }
342+ catch (JmsException ex ) {
343+ throw translateIfNecessary (ex );
344+ }
303345 }
304346
305347 private MessagingMessageCreator createMessageCreator (Message <?> message ) {
@@ -325,6 +367,15 @@ protected Message<?> doConvert(javax.jms.Message message) {
325367 catch (JMSException ex ) {
326368 throw new MessageConversionException ("Could not convert '" + message + "'" , ex );
327369 }
370+ catch (JmsException ex ) {
371+ throw new MessageConversionException ("Could not convert '" + message + "'" , ex );
372+ }
373+ }
374+
375+ @ SuppressWarnings ("ThrowableResultOfMethodCallIgnored" )
376+ protected RuntimeException translateIfNecessary (RuntimeException rawException ) {
377+ MessagingException messagingException = this .exceptionTranslator .translateExceptionIfPossible (rawException );
378+ return (messagingException != null ? messagingException : rawException );
328379 }
329380
330381
@@ -341,7 +392,15 @@ public MessagingMessageCreator(Message<?> message, MessageConverter messageConve
341392
342393 @ Override
343394 public javax .jms .Message createMessage (Session session ) throws JMSException {
344- return this .messageConverter .toMessage (this .message , session );
395+ try {
396+ return this .messageConverter .toMessage (this .message , session );
397+ }
398+ catch (JMSException ex ) {
399+ throw new MessageConversionException ("Could not convert '" + message + "'" , ex );
400+ }
401+ catch (JmsException ex ) {
402+ throw new MessageConversionException ("Could not convert '" + message + "'" , ex );
403+ }
345404 }
346405 }
347406
0 commit comments