Don*_*100 4 expression scope mule
Mule表达式组件中的变量范围是什么,以及它与流变量的关系如何?我有一个带有a的流程,set-variable并且惊讶地看到该值被一个赋值所覆盖expression-component.例如,
<flow name="HelloWorldFlow1" doc:name="HelloWorldFlow1">
<http:inbound-endpoint exchange-pattern="request-response"
host="localhost" port="9999" doc:name="HTTP"
doc:description="This endpoint receives an HTTP message." path="helloworld"/>
<set-variable variableName="asdf" value="firstvalue" doc:name="Variable"/>
<logger message="#[flowVars["asdf"]]" level="INFO" doc:name="Logger"/>
<expression-component doc:name="Expression"><![CDATA[asdf = "secondvalue";]]></expression-component>
<logger message="#[flowVars["asdf"]]" level="INFO" doc:name="Logger"/>
<expression-component doc:name="Expression"><![CDATA[qwer = "thirdvalue";]]></expression-component>
<logger message="#[flowVars["qwer"]]" level="INFO" doc:name="Logger"/>
</flow>
Run Code Online (Sandbox Code Playgroud)
这个输出是:
INFO 2014-04-25 08:58:46,889 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: firstvalue
INFO 2014-04-25 08:58:46,893 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: secondvalue
INFO 2014-04-25 08:58:46,895 [[helloworld].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: null
Run Code Online (Sandbox Code Playgroud)
如果可能的话,您能指出我对范围规则的文档吗?我尝试了一些不同的搜索,并继续获得无关的结果.
澄清:在expression-componentMule中,是否首先检查是否存在具有给定名称的流变量,然后使用该变量而不是创建新变量?如果表达式组件创建变量,那么范围是否仅限于表达式组件代码?在http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/中,它说Mule流变量"表现得像实例属性",但我找不到定义什么是实例属性.单词范围也不在表达式组件参考页面中(http://www.mulesoft.org/documentation/display/current/Expression+Component+Reference).
随着<set-variable你创建一个流变量.其范围内flow声明它,也sub-flows或者private flow通过这个流程调用.把它想象成一个实例变量.
此外,当您显示仅3个日志语句的输出时,您的流中有4个记录器语句.如果你修改log语句以包含你正在打印的值,那么试图弄清楚print语句是针对哪个变量的话会更加困惑:
<logger message="Value of asdf is: #[flowVars['asdf']]" level="INFO" doc:name="Logger"/>
Run Code Online (Sandbox Code Playgroud)
而且您不需要围绕"变量名称.其他简写符号就是说
<logger message="Value of asdf is: #[asdf]" level="INFO" doc:name="Logger"/>
Run Code Online (Sandbox Code Playgroud)
有关范围的更广泛参考,请参阅:http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/
当您覆盖流中的变量值时,初始值将被下一个指定的值覆盖,就像java中的变量值赋值函数一样.
编辑:
你是对的,创建的变量<set-variable>可以用表达式组件重新赋值,但在里面创建的变量<expression-component>没有范围外的那个块.抱歉,我没有备份链接,这是基于我的实验.
| 归档时间: |
|
| 查看次数: |
5795 次 |
| 最近记录: |