我刚开始与骡子合作。 流程描述: 我有一个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脚本中引用此会话值?
答案 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或流量变量
**如果值用作字符串,请勿忘记使用“+”连接字符串。