Mule 3 动态检索占位符值

Mule 3 retrieving the placeholder value dynamically

我有一个用例,我需要从我的属性文件中检索值,但该键应该从我的查询参数中动态派生。

如何在 MEL 或 Groovy 中处理这个问题?我知道在 DW 中是可能的。

Http request
https://localhost:9898/getStore?search=customer.weststore.name

我的占位符是 -

file.properties
customer.weststore.name=TESTING
customer.eaststore.name=IRERRER

所以我需要这样访问的方式

<set-variable variableName="westDetail" value="#[message.inboundProperites['customer.weststore.name']" doc:name="Variable"/>
<logger message="${westDetail}" level="INFO" /> --> Failed as no placeholder available

当我尝试上述操作时,由于没有可用的占位符“westDetail”而失败,而我需要从属性文件中获取该特定键。

这与本文相关 - https://help.mulesoft.com/s/question/0D52T00004mXTQUSA4/dynamically-read-property-values-from-a-properties-file-in-mule 但 DW 提供的唯一解决方案不是 MEL 或 Groovy。

有没有人建议,可以吗?

我了解到问题是您希望通过执行时获得的键来查询属性。

你做错了。 ${} 用于评估 属性 的值,这是在应用程序初始化时完成的。您错过了获取 set-variable.

中的实际值

#[] 用于执行 MEL 表达式,它发生在执行时。 flowVars.westDetail 是一个 MEL 表达式,returns 流变量 westDetail 的值。您不能使用 MEL 表达式计算 属性 占位符 ${},因为它们是在不同时间计算的。

一种解决方案是使用 Spring bean 来存储属性,而不是配置属性占位符。然后你可以将它分配给一个流变量并像访问地图一样访问它。

示例:

<spring:beans>
  <spring:bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <spring:property name="location" value="classpath:items.properties"/>      
  </spring:bean>    
</spring:beans>

<flow name="myFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <set-variable value="#[app.registry.myProperties]" variableName="props"></set-variable>
    <logger message="a=#[flowVars.props['a']]" level="INFO"/>
</flow>

items.properties:

a=1
b=2
c=3

输出:

a=1