java.lang.ClassCastException : com. tibco.tibjms.TibjmsxSessionImp 无法转换为 javax.jms.QueueSession

标签 java spring jms spring-jms

当我尝试创建 JMS session 时,出现上述错误。请提出建议。使用的 JMS 服务器是 TIBCO。我在类路径中有 tibjms.jar 和 jms.1.1 jar。我能够创建连接。 spring-jms版本为4.1.4-Release版本。

String reply                = null;
    QueueConnection connection  = null;
    QueueSession requestSession = null;
    QueueSession replySession   = null;
    QueueReceiver receiver      = null;
    TemporaryQueue replyQueue   = null;

    try {
        connection      =    (QueueConnection)jmsTemplate.createConnection();
        connection.start();

        requestSession              = (QueueSession) jmsTemplate.createSession(connection);
        replySession                = (QueueSession) jmsTemplate.createSession(connection);
        Queue queue                 = (Queue)jmsTemplate.getDestination(requestSession, jmsTemplate.getDefaultDestinationName());
        replyQueue                  = replySession.createTemporaryQueue();
        TextMessage requestMessage  = requestSession.createTextMessage(message);

        requestMessage.setJMSReplyTo(replyQueue);

        LOGGER.debug("sending request/reply message "
                        + jmsTemplate.getConnectionFactory()
                        +  requestMessage);

        QueueSender queueSender =   requestSession.createSender(queue);
        queueSender.send(requestMessage);

        receiver                    = replySession.createReceiver(replyQueue);
        TextMessage replyMessage    = (TextMessage)receiver.receive(jmsTemplate.getReceiveTimeout());

        if(replyMessage != null){
            reply       =   replyMessage.getText();
        }
    }catch(JMSException ex) {

最佳答案

是什么导致你创造出这种令人厌恶的东西?使用 JmsTemplateJmsMessagingTemplate相反。

用此替换您的代码

JmsMessagingTemplate jms = new JmsMessagingTemplate(jmsTemplate);
String reply = jms.convertSendAndReceive(message, String.class);

或者,如果您想使用普通的 JmsTemplate,请使用 sendAndReceive 方法,缺点是您需要自己处理消息创建和转换。

Message response = jmsTemplate.sendAndReceive(new MessageCreator() {
    public Message createMessage(Session session) throws JMSException {
        return session.createTextMessage(message);
    }

});
String reply = ((TextMessage) replyMessage).getText();

无论哪种方式,一切都会为您处理。您正在使用 Spring,那么您也可以从中受益。

关于java.lang.ClassCastException : com. tibco.tibjms.TibjmsxSessionImp 无法转换为 javax.jms.QueueSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651583/

相关文章:

java - 无论如何,使用 intellij Community Edition 在 AS7(Jboss) 上调试 Web 项目

java - Glassfish 服务器日志泛滥并中断空闲线程

java - Spring 配置 : No mapping found for HTTP request with URI in DispatcherServlet with name 'dispatcherServlet'

jms - WebSphere MQ 中监听器的用途是什么?

javax.jms.JMSException : No ManagedConnections available within configured blocking timeout

JAVA - 将 Android 应用程序转换为 fragment 样式应用程序

java - 错误: MainActivity is not abstract and does not override abstract method onClick(View) in OnClickListener

java - 无法使用 jasypt 加密进行 Maven 发布

java - Hibernate:从带有外键的关联表中删除记录

java - 如何在 JUnit 中等待 @JMSListener 注解的方法完成