如何将 Mule 变量值分配给 属性 键值查找?
How can i assign Mule Variable Value to Property Key -Value lookup?
- 我想从变量中找出careerName
- 我想使用那个 CareerName 作为 属性 Key。例子。如果 careerName 出现为 apple,我将针对该键 apple=ST\*214|ST\*210 设置值。
我有以下 Mule Choice Expression 代码行,我尝试使用它,但在这里没有成功。
mule-esb.test1.properties
ftp.inbound.carriers.path='CareerName1/InBound/','CareerName2/InBound/','CareerName3/InBound','CareerName4/InBound/','apple/InBound/'
CareerName1=ST\*214|ST\*210
CareerName2=ST\*214|ST\*210
CareerName3=.\ST.214.\
CareerName4=ST\*214
苹果=ST\*214
<context:property-placeholder location="mule-esb.${mule.env}.properties" />
<when expression="import java.util.regex.Pattern;Pattern p = Pattern.compile('${'+message.getInvocationProperty('careerName')+'}');return p.matcher(payload.toString()).find();" evaluator="groovy">
正在寻找有关此脚本的替代方案或解决方案。
MEL 具有广泛的正则表达式支持,您不需要使用 Groovy。参见:http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+Tips#MuleExpressionLanguageTips-RegexSupport
您需要将您的属性加载到 Map
中,您可以从注册表中查询,但也可以在 属性 占位符解析器中使用。所以这样做:
<util:properties id="configProperties"
location="classpath:mule-esb.${mule.env}.properties" />
<context:property-placeholder properties-ref="configProperties" />
有了这个,以下应该可以工作:
<when expression="#[regex(app.registry.configProperties[careerName])]">
定义一个 spring bean 全局配置 bean 的键值对属性。
bean 定义应该接受 spring 属性和一个方法,该方法接受键和 returns 相应的值。
示例 bean 定义如下
<spring:bean id="entityMapper" name="entityMapper" class="com.xx.xx.commons.ClassNameXX">
<spring:property name="entities">
<spring:props>
<spring:prop key="CareerName1">${CareerName1}</spring:prop>
.
.
</spring:props>
</spring:property>
</spring:bean>
因此在流程级别中,您可以使用以下表达式从 bean 中获取值。
#[app.registry.entityMapper.getEntity(message.getInvocationProperty('careerName'))]
其中 entityMapper 将是 bean 名称,getEntity 是 bean 中定义的方法,它接受 careerName 和 return 相应的值。
希望这对您有所帮助。
动态地,您不能直接从上下文占位符访问该值。
- 我想从变量中找出careerName
- 我想使用那个 CareerName 作为 属性 Key。例子。如果 careerName 出现为 apple,我将针对该键 apple=ST\*214|ST\*210 设置值。
我有以下 Mule Choice Expression 代码行,我尝试使用它,但在这里没有成功。
mule-esb.test1.properties
ftp.inbound.carriers.path='CareerName1/InBound/','CareerName2/InBound/','CareerName3/InBound','CareerName4/InBound/','apple/InBound/'
CareerName1=ST\*214|ST\*210
CareerName2=ST\*214|ST\*210
CareerName3=.\ST.214.\
CareerName4=ST\*214
苹果=ST\*214
<context:property-placeholder location="mule-esb.${mule.env}.properties" />
<when expression="import java.util.regex.Pattern;Pattern p = Pattern.compile('${'+message.getInvocationProperty('careerName')+'}');return p.matcher(payload.toString()).find();" evaluator="groovy">
正在寻找有关此脚本的替代方案或解决方案。
MEL 具有广泛的正则表达式支持,您不需要使用 Groovy。参见:http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+Tips#MuleExpressionLanguageTips-RegexSupport
您需要将您的属性加载到 Map
中,您可以从注册表中查询,但也可以在 属性 占位符解析器中使用。所以这样做:
<util:properties id="configProperties"
location="classpath:mule-esb.${mule.env}.properties" />
<context:property-placeholder properties-ref="configProperties" />
有了这个,以下应该可以工作:
<when expression="#[regex(app.registry.configProperties[careerName])]">
定义一个 spring bean 全局配置 bean 的键值对属性。 bean 定义应该接受 spring 属性和一个方法,该方法接受键和 returns 相应的值。
示例 bean 定义如下
<spring:bean id="entityMapper" name="entityMapper" class="com.xx.xx.commons.ClassNameXX">
<spring:property name="entities">
<spring:props>
<spring:prop key="CareerName1">${CareerName1}</spring:prop>
.
.
</spring:props>
</spring:property>
</spring:bean>
因此在流程级别中,您可以使用以下表达式从 bean 中获取值。
#[app.registry.entityMapper.getEntity(message.getInvocationProperty('careerName'))]
其中 entityMapper 将是 bean 名称,getEntity 是 bean 中定义的方法,它接受 careerName 和 return 相应的值。
希望这对您有所帮助。 动态地,您不能直接从上下文占位符访问该值。