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
我有一个用例,我需要从我的属性文件中检索值,但该键应该从我的查询参数中动态派生。
如何在 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