Обработка исключений в отправке JmsTemplate

Я хочу отправить большое строковое сообщение (3-5 МБ) с помощью jmstemplate (с брокером jms activemq). В середине отправки сообщения я отключил своего брокера; Почему я не могу поймать выброшенное исключение в catch (Exception e)? Что мне делать, чтобы обработать это исключение?

public class MessageSenderServiceImpl implements MessageSenderService
{
    private JmsTemplate jmsTemplate;

    @Override
    @Transactional
    public void sendMessage(final String messageContent, final String destination) throws SendingMessageException
    {
        try
        {
            jmsTemplate.send(destination, new MessageCreator()
            {
                @Override
                public Message createMessage(Session session) throws JMSException
                {
                    BytesMessage byteMessage = session.createBytesMessage();
                    try
                    {
                        byteMessage.writeBytes(messageContent.getBytes("UTF-8"));
                        return byteMessage;
                    } 
                    catch (UnsupportedEncodingException e)
                    {
                        e.printStackTrace();
                        throw new JMSException(e.getMessage());
                    }
                }
            });         
        }
        catch(Exception e)
        {
            throw new SendingMessageException(e.getMessage(),e);
        }
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate)
    {
        this.jmsTemplate = jmsTemplate;
    }
}

заранее спасибо.


person Arya    schedule 01.07.2013    source источник
comment
Какое исключение вы получаете? Что в лог-файле?   -  person Beryllium    schedule 02.07.2013
comment
Вы решили эту проблему? Я вижу нечто подобное. Возможно ли, что JmsTemplate не выдал исключение?   -  person rghome    schedule 25.01.2016


Ответы (1)


Это всего лишь предположение, но это может быть связано с тем, что Spring JmsTemplate повторно генерирует исключения как JmsException, которое является исключением времени выполнения, поэтому вам нужно поймать Throwable, чтобы фактически поймать его.

person Marina    schedule 12.07.2013
comment
Я думаю, что RuntimeException расширяет Exception. - person Arya; 12.07.2013
comment
да, вы правы - пожалуйста, не обращайте внимания на мой комментарий - я смотрел этот пост и пропустил, что вы уже ловите верх Исключение: forum.springsource.org/ - person Marina; 14.07.2013
comment
Не рекомендуется перехватывать Exception для абстрагирования. Я даю вам балл за то, что вы дали мне имя исключения :) JmsException - person JWqvist; 27.10.2015
comment
Это в основном неправильно. JmsException не является подклассом RuntimeException. Я предлагаю следующее руководство по ловле Throwable: если вы не уверены, стоит ли вам ловить Throwable, не стоит. - person augurar; 24.02.2018