spring-integration - Spring Integration DSL、PayloadTypeRouter、路由器不支持的返回类型 [class java.lang.Class]

标签 spring-integration

我想使用 PayloadTypeRouter 作为 Spring Integration DSL 的一部分,如下所示:

jmsFlowsUtils.jmsXmlInputFlow(queue, loggingChannel)
    .<Object, Class<?>>route(Object::getClass, incomingMsg -> incomingMsg
            .subFlowMapping(SomeClass.class.getName(), firstFlow -> firstFlow
                    .<SomeClass>handle(handler1::handle))
                    // and so on
            .subFlowMapping(AnotherClass.class.getName(), secondFlow -> secondFlow
                    .<AnotherClass>handle(handler2::handle)))
                    // and so on
    .get();

在我将 xml 消息发送到队列后,SI 提示

org.springframework.messaging.MessagingException: 
Dispatcher failed to deliver Message; 
nested exception is org.springframework.messaging.MessagingException: 
unsupported return type for router [class java.lang.Class]

知道要应用什么解决方法吗?

最佳答案

.<Object, String>route(p ->  p.getClass().toString(), incomingMsg -> incomingMsg

或者使用 Spring Integration Java DSL 1.2 已经与 Spring Integration 4.3.1Class<?>作为路由键已在 https://jira.spring.io/browse/INT-4057 中修复.

这样你就不需要使用 .toString()用于类(class)。项目测试样本:

@Bean
public IntegrationFlow payloadTypeRouteFlow() {
    return f -> f
            .<Object, Class<?>>route(Object::getClass, m -> m
                    .channelMapping(String.class, "stringsChannel")
                    .channelMapping(Integer.class, "integersChannel"));
}

关于spring-integration - Spring Integration DSL、PayloadTypeRouter、路由器不支持的返回类型 [class java.lang.Class],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39447100/

相关文章:

Spring集成异常

java - 使用 spring 集成从 wmq 获取 JMS 目标

java - Spring Integration 使用 DSL 从 Unix 位置读取文件

spring-integration - 在初始化方法中使用 channel 时,Spring集成 'Dispatcher has no subscribers'

java - 我可以使用哪种 Spring 集成模式?

java - 使用 DataProvider 参数化的 JGiven 失败,名称为 "method ' 应该没有参数”

java - 我需要当前易于遵循的说明来从 XML 配置 spring 集成 kafka

java - 为链中的每个处理程序分配不同的错误处理程序

集群中的 spring 集成 + cron + quartz ?

java - Spring集成(5.0)-文件适配器: Enabling prevent-duplicates in custom scanner is not working