如何在mule studio中的Groovy脚本中引用会话变量

时间:2013-02-08 12:50:38

标签: mule

我刚开始与骡子合作。 流程描述: 我有一个HTTP入站端点接收XML消息,我Hvae使用XML有效负载更新数据库(derby)。 例如:我将在请求中收到Emp Id和Emp名称,Exp。我必须用这些值更新表格。

我的实施:

收到XML输入后,我使用消息Property transformer将值保存在Session范围内。

 <message-properties-transformer scope="session" doc:name="Message Properties">    
    <add-message-property key="EmpNum"
                          value="#[xpath:/CreateEmployee/EmpNum]" /> 
 </message-properties-transformer>
像上面一样。然后我有Groovy Script组件来更新表。 我的查询是:

r.update(conn, "INSERT INTO Employee values(#[header:session:EmpNum],#[header:session:EmpName],#[header:session:Experience],#[header:session:Role])");

但是它引发了错误:

Lexical error at line 1, column 29.  Encountered: "#" (35), after : "". (org.apache.derby.iapi.error.StandardException)
  org.apache.derby.iapi.error.StandardException:-1 (null)
 Lexical error at line 1, column 29.  Encountered: "#" (35), after : "". Query: INSERT INTO Employee values(#[header:session:EmpNum],#[header:session:EmpName],#[header:session:Experience],#[header:session:Role]) Parameters: [](SQL Code: 30000, SQL State: + 42X02) (java.sql.SQLException)
  org.apache.commons.dbutils.QueryRunner:540 (null)

我使用了记录器组件来显示值。

#[header:session:EmpNum]

显示正确的值。

请帮我介绍如何在Groovy脚本中引用此会话值?

5 个答案:

答案 0 :(得分:4)

以下在Mule中使用Groovy脚本分别读取流变量或会话变量时,对我有用。

读取流量变量我正在使用

message.getInvocationProperty('yourVarsName').toString()

用于读取会话变量我正在使用

sessionVars['yoursVarsName'] or flowVars['yoursVarsName']

他们在Mule 3.5的Groovy脚本中对我很有用。

答案 1 :(得分:2)

您不能直接在Groovy脚本中使用Mule表达式语言(MEL)。

如果您使用的是Mule 3.3,请将#[header:session:EmpName]替换为sessionVars('EmpName'),并将其替换为其他变量。

对于以前的版本,请将#[header:session:EmpName]替换为message.getProperty('EmpName',PropertyScope.SESSION)

答案 2 :(得分:0)

在将其作为SQL命令发送之前,必须允许Groovy脚本设置该值。您将文字“message.getProperty('Experience',PropertyScope.SESSION)”直接发送到SQL命令。

qr.update(conn, "INSERT INTO Employee values("+message.getProperty('EmpNum',PropertyScope.SESSION)+","+message.getProperty('EmpName',PropertyScope.SESSION)+","+message.getProperty('Experience',PropertyScope.SESSION)+","+message.getProperty('Role',PropertyScope.SESSION)+")")

另外,不要忘记在脚本中导入PropertyScope类:

import org.mule.api.transport.PropertyScope

答案 3 :(得分:0)

#[groovy:message.getSessionProperty('sesVarValue')

答案 4 :(得分:0)

不确定是否有任何人需要答案,但对于Mule 3.6+我只需执行 sessionVars ['sessVarName'] / flowVars ['flowVarName'] 即可访问Sessions或流量变量

**如果值用作字符串,请勿忘记使用“+”连接字符串。