从 Mule 4 中的 属性 文件中读取 mule 变量
Reading mule variables from property file in Mule 4
我有一个场景,在我的 mule 流中定义了一个变量。在属性文件中,有一个 属性 是一个字符串,包括流中定义的变量。当从 属性 文件中读取 属性 时,不是用它的值替换变量,而是将其打印为文本。 Mule 运行时版本是 4.2.2。这在 Mule 3.x 中按预期工作,但在 4.x 版本中面临问题。
<flow name="sample-testFlow1" doc:id="4138e351-316b-40af-a694-c416b5dc317f" >
<http:listener doc:name="Listener" doc:id="424c82c0-3e23-4f61-8e9b-62ec69711493" config-ref="HTTP_Listener_config" path="/test2"/>
<set-variable value='#["EmployeeCode"]' doc:name="Set Variable" doc:id="45bd2007-907b-4749-af14-001ad2cf82a6" variableName="testVariable"/>
<ee:transform doc:name="Transform Message" doc:id="e23dff81-a4e7-4d26-8f9e-b533442ddd5b" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0 output application/java --- p('test.prop')]]>/ee:set-payload>
</ee:message>
</ee:transform>
</flow>
属性 文件:
test.prop=Hello!Variable is #[vars.testVariable]
预期输出:Hello!Variable is EmployeeCode
但得到:Hello!Variable is #[vars.testVariable]
非常感谢任何帮助。
谢谢。
这是意料之中的事情。 属性 作为字符串读取,而不是作为表达式求值。即使它被扩展,结果也会是一个错误,因为你不能使用 #[...]
来评估另一个表达式中的表达式,因为 <ee:set-payload>
元素的内容已经是一个 DataWeave 表达式。
我认为您应该尝试使用 Dynamic Expression Component 来动态计算表达式,而不是转换。使 属性 的值成为表达式,而不使用 #[...]
,即 "Hello!Variable is " ++ vars.testVariable
.
只是将答案添加到 Aled,
您也可以像下面这样在 Mule 4.x
中读取 Property/YAML 文件中的值。
Mule::p('http.port')
您不能使用 #[...]
如上所述在另一个表达式中计算表达式,但您可以在 DataWeave 中的字符串中使用 $()
来计算 DataWeave 表达式。
感谢 Alad 和 Manish 的回复。
我什至按照建议尝试过不使用表达式标记“#[]”,但这是作为字符串而不是值打印的。
“你好!变量是”++ vars.testVariable 评估为 'Hello!Variable is vars.testVariable' 而不是 'Hello!Variable is EmployeeCode'。
使用 Mule::p('http.port') 返回 #["Hello!Variable is" ++ vars.sampleVar]。所以,我试图将它设置在另一个变量中并读取它,但没有成功。
谢谢。
你可以看看Mule中的Parse Template Reference。我相信它会让您的解决方案更容易。这是文档页面的 link->https://docs.mulesoft.com/mule-runtime/4.3/parse-template-reference
请告诉我你的想法。
我有一个场景,在我的 mule 流中定义了一个变量。在属性文件中,有一个 属性 是一个字符串,包括流中定义的变量。当从 属性 文件中读取 属性 时,不是用它的值替换变量,而是将其打印为文本。 Mule 运行时版本是 4.2.2。这在 Mule 3.x 中按预期工作,但在 4.x 版本中面临问题。
<flow name="sample-testFlow1" doc:id="4138e351-316b-40af-a694-c416b5dc317f" >
<http:listener doc:name="Listener" doc:id="424c82c0-3e23-4f61-8e9b-62ec69711493" config-ref="HTTP_Listener_config" path="/test2"/>
<set-variable value='#["EmployeeCode"]' doc:name="Set Variable" doc:id="45bd2007-907b-4749-af14-001ad2cf82a6" variableName="testVariable"/>
<ee:transform doc:name="Transform Message" doc:id="e23dff81-a4e7-4d26-8f9e-b533442ddd5b" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0 output application/java --- p('test.prop')]]>/ee:set-payload>
</ee:message>
</ee:transform>
</flow>
属性 文件:
test.prop=Hello!Variable is #[vars.testVariable]
预期输出:Hello!Variable is EmployeeCode
但得到:Hello!Variable is #[vars.testVariable]
非常感谢任何帮助。
谢谢。
这是意料之中的事情。 属性 作为字符串读取,而不是作为表达式求值。即使它被扩展,结果也会是一个错误,因为你不能使用 #[...]
来评估另一个表达式中的表达式,因为 <ee:set-payload>
元素的内容已经是一个 DataWeave 表达式。
我认为您应该尝试使用 Dynamic Expression Component 来动态计算表达式,而不是转换。使 属性 的值成为表达式,而不使用 #[...]
,即 "Hello!Variable is " ++ vars.testVariable
.
只是将答案添加到 Aled,
您也可以像下面这样在 Mule 4.x
中读取 Property/YAML 文件中的值。
Mule::p('http.port')
您不能使用 #[...]
如上所述在另一个表达式中计算表达式,但您可以在 DataWeave 中的字符串中使用 $()
来计算 DataWeave 表达式。
感谢 Alad 和 Manish 的回复。
我什至按照建议尝试过不使用表达式标记“#[]”,但这是作为字符串而不是值打印的。
“你好!变量是”++ vars.testVariable 评估为 'Hello!Variable is vars.testVariable' 而不是 'Hello!Variable is EmployeeCode'。
使用 Mule::p('http.port') 返回 #["Hello!Variable is" ++ vars.sampleVar]。所以,我试图将它设置在另一个变量中并读取它,但没有成功。
谢谢。
你可以看看Mule中的Parse Template Reference。我相信它会让您的解决方案更容易。这是文档页面的 link->https://docs.mulesoft.com/mule-runtime/4.3/parse-template-reference
请告诉我你的想法。