22
22
import javax .jms .Session ;
23
23
24
24
import org .springframework .beans .factory .InitializingBean ;
25
- import org .springframework .jms .support . converter . MessageConversionException ;
25
+ import org .springframework .jms .JmsException ;
26
26
import org .springframework .jms .support .converter .MessageConverter ;
27
27
import org .springframework .jms .support .converter .MessagingMessageConverter ;
28
28
import org .springframework .jms .support .converter .SimpleMessageConverter ;
29
29
import org .springframework .messaging .Message ;
30
30
import org .springframework .messaging .MessagingException ;
31
+ import org .springframework .messaging .MessagingExceptionTranslator ;
32
+ import org .springframework .messaging .converter .MessageConversionException ;
31
33
import org .springframework .messaging .core .AbstractMessagingTemplate ;
32
34
import org .springframework .messaging .core .MessagePostProcessor ;
33
35
import org .springframework .util .Assert ;
@@ -45,6 +47,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
45
47
46
48
private MessageConverter jmsMessageConverter = new MessagingMessageConverter ();
47
49
50
+ private MessagingExceptionTranslator exceptionTranslator = new JmsMessagingExceptionTranslator ();
51
+
48
52
private String defaultDestinationName ;
49
53
50
54
@@ -85,6 +89,14 @@ public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
85
89
this .jmsMessageConverter = jmsMessageConverter ;
86
90
}
87
91
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
+
88
100
/**
89
101
* Configure the default destination name to use in send methods that don't have
90
102
* 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
271
283
272
284
@ Override
273
285
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
+ }
275
292
}
276
293
277
294
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
+ }
279
301
}
280
302
281
303
@ Override
282
304
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
+ }
285
312
}
286
313
287
314
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
+ }
290
322
}
291
323
292
324
@ Override
293
325
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
+ }
297
334
}
298
335
299
336
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
+ }
303
345
}
304
346
305
347
private MessagingMessageCreator createMessageCreator (Message <?> message ) {
@@ -325,6 +367,15 @@ protected Message<?> doConvert(javax.jms.Message message) {
325
367
catch (JMSException ex ) {
326
368
throw new MessageConversionException ("Could not convert '" + message + "'" , ex );
327
369
}
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 );
328
379
}
329
380
330
381
@@ -341,7 +392,15 @@ public MessagingMessageCreator(Message<?> message, MessageConverter messageConve
341
392
342
393
@ Override
343
394
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
+ }
345
404
}
346
405
}
347
406
0 commit comments