【问题标题】:Spring integration not transforming ByteMessageSpring集成不转换ByteMessage
【发布时间】:2021-04-14 19:06:13
【问题描述】:

我有一个 JMS 侦听器,它正在从另一个应用程序接收 ByteMessage。当前应用程序正在使用 Spring JMS。我想在这里介绍弹簧集成。所以我添加了以下示例代码来监听消息。

@Configuration
public class JmsConfiguration {

@Bean
public IntegrationFlow integrationFlow(ConnectionFactory connectionFactory) {

    return IntegrationFlows
            .from(Jms.messageDrivenChannelAdapter(connectionFactory)
                    .destination("fooQueue"))
                    .transform("hello "::concat)
                    .get();
}

然后我得到如下的类转换异常:

java.lang.ClassCastException: [B cannot be cast to java.lang.String

我收到一个 ByteMessage,但我没有找到一个很好的例子来说明如何提取带有字节数组有效负载的 ByteMessage。我是 Spring 集成领域的新手。

【问题讨论】:

    标签: spring spring-boot spring-integration spring-jms spring-integration-dsl


    【解决方案1】:

    .transform() 之前添加.transform(Transformers.objectToString())BytesMessage 将生成带有 byte[] 有效负载的消息,因此您需要在尝试连接之前将其转换为 String

    【讨论】:

    • 这个问题听起来有误导性。 Spring Integration 的 Jms.messageDrivenChannelAdapter() 默认带有 SimpleMessageConverter。请参阅该规范的 JavaDocs jmsMessageConverter(MessageConverter messageConverter) 和文档:docs.spring.io/spring-integration/reference/html/…。所以,Spring Integration 确实转换了ByteMessage,但它确实产生了一个byte[],正如ClassCastException 所证实的那样。
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2019-04-10
    • 2017-05-24
    相关资源
    最近更新 更多