Mule-expression-Geltungsbereich von Variablen
Was ist der Gültigkeitsbereich von Variablen in der Mule-expression-Komponenten, und wie verhält die sich zu flow-Variablen? Ich hatte einen Fluss mit einem set-variable
und war überrascht zu sehen, dass der Wert überschrieben wird, indem eine Zuweisung in eine expression-component
. Zum Beispiel,
<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>
Die Ausgabe ist:
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
Wenn möglich, können Sie zeigen Sie mir die Dokumentation des scoping-Regeln? Ich habe versucht ein paar verschiedene Suchbegriffe und immer irrelevante Ergebnisse.
Klarstellung: Innerhalb der expression-component
tut Mule zunächst überprüfen, um zu sehen, ob es eine flow-variable mit einem bestimmten Namen und verwenden Sie dann die variable, anstatt eine neue zu erstellen? Wenn die Ausdruck-Komponente erstellt eine variable, der Gültigkeitsbereich beschränkt sich auf nur die Ausdruck-Komponente code? In http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/, es sagt, dass Mule flow-Variablen "Verhalten sich wie die Instanz-Eigenschaften", aber ich kann nicht finden, eine definition für das, was eine Instanz-Eigenschaft ist. Das Wort Umfang ist auch nicht in dem Ausdruck Komponente Referenz Seite (http://www.mulesoft.org/documentation/display/current/Expression+ - Komponente+Referenz).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
<set-variable
erstellen Sie eine flow-variable. Sein Geltungsbereich ist innerhalbflow
es deklariert ist und auchsub-flows
oderprivate flow
genannt, die von diesem Fluss. Finde es von wie wie eine Instanz-variable.Darüber hinaus haben Sie 4 logger-Anweisungen in Ihrem flow, während du zeigst Leistung von nur 3 log-Anweisungen. Wenn Sie Sie ändern, log-Anweisung beinhalten, was den Wert, die Sie drucken wollen, wird es weniger Verwirrung zu versuchen, um herauszufinden, dass die print-Anweisung für die variable wie:
Und Sie nicht brauchen, um surround -
"
um Ihre Variablennamen. Andere Kurznotation ist einfach nur zu sagenWeitergehenden Verweis auf Bereiche zu sehen: http://blogs.mulesoft.org/mule-school-the-mulemessage-property-scopes-and-variables/
Beim überschreiben einer variable Wert in einer flow, initial-Wert überschrieben nächsten zugewiesenen Wert wie ein Variablen-Wert-Zuordnung Funktionen in java.
EDIT:
Du hast Recht, erstellten Variablen
<set-variable>
können neu belegt werden, mit expression-Komponente, aber Variablen innerhalb<expression-component>
nicht über den Umfang, die Seite zu blockieren. Leider habe ich keine links zum sichern mit, basiert dies auf mein experiment.qwer
in Ihre 3. logger-Anweisung, wie ist es in Bezug auf Ihre Frage.Abgesehen davon, was @Charu Khurana erklärt, ich sehe in unserer Anwendung, die flow-Variablen können dazu verwendet werden, die von der übergeordneten flow. Also, wenn Sie Sie nennen ein Kind Strömung, die von einem übergeordneten flow(mit
<flow-ref>
zum Beispiel), und verwenden Sie<set-variable>
im inneren, haben Sie Zugriff auf diese vars in Ihrem übergeordneten flow.