3

我想使用 jmstemplate(使用 activemq jms 代理)发送一条大字符串消息(3-5 MB)。在发送消息的过程中,我关闭了我的代理;为什么我不能在 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;
    }
}

提前致谢。

4

1 回答 1

0

这只是一个猜测,但这可能是因为 Spring 的 JmsTemplate 将异常重新抛出为 JmsException ,这是一个运行时异常,因此您需要捕获 Throwable 才能实际捕获它。

于 2013-07-12T15:55:17.030 回答