【问题标题】:Injecting Spring bean into Camel DSL将 Spring bean 注入 Camel DSL
【发布时间】:2015-03-29 22:45:50
【问题描述】:

尝试将 Spring bean 添加到 Camel 主体属性。 比如:

MVEL: exchange.in.body.limit = uiLimit
<transform>
    <mvel>
        exchange.in.body.limit = uiLimit;
        exchange.in.body;
    </mvel>
</transform>
Spel: request.body.limit = uiLimit

或者甚至先放入标题:

<setHeader headerName="limit">
  <simple>ref:uiLimit</simple>
</setHeader>

uiLimit 在哪里:

<bean id="uiLimit" class="java.math.BigInteger">
  <constructor-arg value="${UI_LIMIT} />
</bean>

标题和属性仍然为空。

任何想法为什么注册表中的 bean 查找不适用于 OSGI? (单个包内的所有 bean/路由)

PS:这在 Route 中运行良好:

<bean ref="uiLimit" method="toString"/>

【问题讨论】:

  • 什么是 ${UI_LIMIT},它是一个属性吗?而且,在最后一个代码块中,缺少 2 个右引号;-)
  • 感谢您指出这一点。添加了报价。 ${UI_LIMIT} 是一个属性(字符串)

标签: java spring osgi apache-camel


【解决方案1】:

transform 仅用于转换消息正文。不要改变标题。

如果要更改标题,请使用setHeader

【讨论】:

  • 我已经描述了在 Registry 中查找 Spring bean 的 3 种方法。 1. 通过 Simple 和 setHeader 2. 通过 Mvel 3. 通过 Spel 没有一个在 OSGI 环境中工作
【解决方案2】:

这种行为的原因是 Exchange 在另一个包中创建并通过暴露的服务来:

<osgi:service ref="someHandler" interface="org.apache.camel.Component"/>

Exchange 包含来自另一个未声明此 bean 的包的注册表/上下文。 所有表达式语言都使用附加到 Exchange 的注册表/上下文,而不是当前 budle 的注册表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2012-02-19
    • 2011-05-29
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多