【问题标题】:Unable to route to Message endpoints using SpEL in spring router无法在 Spring 路由器中使用 SpEL 路由到消息端点
【发布时间】:2016-07-15 09:37:11
【问题描述】:

我有一个message-driven-channel-adapter,它正在侦听一个应用程序正在向其发布以下格式的 json 消息的 jms 队列“inputqueue”。

{
 "name": "Praveep",
 "action": "Drink",
 "age": "32",
 "userid": "pk",
 "details": [{
    "state": "karnataka",
    "country": "India",
  }]
}

在我的applicationContext 文件中,我定义了一个router,它基于操作将消息指向适当的队列。

<int:channel id="processEmpChannel">
    <int:queue />
</int:channel>

<int:channel id="drink">
    <int:queue />
</int:channel>

<int:channel id="eat">
    <int:queue />
</int:channel>

<int:channel id="sleep">
    <int:queue />
</int:channel>


<int:router input-channel="processEmpChannel" expression="$.action">
    <int:mapping value="drink" channel="drink" />
    <int:mapping value="eat" channel="eat" />
    <int:mapping value="sleep" channel="sleep" />
</int:router>

<int:service-activator input-channel="drink"
    ref="springExample" method="handleDrink">
    <int:poller ref="poller"></int:poller>
</int:service-activator>

<int:service-activator input-channel="eat"
    ref="springExample" method="handleEat">
    <int:poller ref="poller"></int:poller>
</int:service-activator>

<int:service-activator input-channel="sleep"
    ref="springExample" method="handleSleep">
    <int:poller ref="poller"></int:poller>
</int:service-activator>

在我的 Class 文件中,我为公共方法中的每个操作定义了方法。当我运行 java 程序时,我收到以下错误。有人可以告诉我spel 表达式中哪里出错了。

Property or field '$' cannot be found on object of type 'org.springframework.messaging.support.GenericMessage' - maybe not public?

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    JSON 属性访问器为not configured by default,添加:

    <int:spel-property-accessors>
        <bean id="jsonPropertyAccessor" class="org.springframework.integration.json.JsonPropertyAccessor"/>
    </int:spel-property-accessors>
    

    【讨论】:

    • 如何使用Java配置JsonPropertyAccessor?
    • 我对此没有很好的答案;您可以将 PA 添加到 IntegrationEvaluationContextFactoryBean (getPropertyAccessors().put(...)) 但在用户代码中这样做对于组件已经获得评估上下文的许多情况来说为时已晚。它必须在应用程序上下文生命周期早期运行的BeanPostProcessor 中完成。我将打开一个 JIRA 问题,但现在,您可能会发现将@ImportResource 一个小的 XML sn-p 放入您的 @Configuration 类之一更容易。
    • 好的,谢谢你的解释。目前,我使用#JsonPath 作为替代方案。您能提供 JIRA 网址吗?
    猜你喜欢
    • 2021-04-15
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多