3

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

我的实现:

收到 XML 输入后,我使用消息属性转换器将值保存在 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])");

但它抛出错误:

第 1 行第 29 列出现词汇错误。遇到:"#" (35),在:"" 之后。(org.apache.derby.iapi.error.StandardException)
  org.apache.derby.iapi.error.StandardException:-1 (null)
 第 1 行第 29 列出现词汇错误。遇到:"#" (35),在:"" 之后。查询:INSERT INTO Employee values(#[header:session:EmpNum],#[header:session:EmpName],#[header:session:Experience],#[header:session:Role]) 参数:[](SQL 代码: 30000, SQL 状态: + 42X02) (java.sql.SQLException)
  org.apache.commons.dbutils.QueryRunner:540(空)

我使用了一个记录器组件来显示这些值。

#[header:session:EmpNum]

正在显示正确的值。

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

4

5 回答 5

4

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

为了读取我正在使用的流变量

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

为了阅读我正在使用的会话变量

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

在 Mule 3.5 的 Groovy 脚本中,它们对我非常有效。

于 2014-02-25T01:00:54.193 回答
2

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

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

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

于 2013-02-08T13:05:59.480 回答
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
于 2013-02-12T13:03:45.843 回答
0
#[groovy:message.getSessionProperty('sesVarValue')
于 2013-11-06T04:10:10.230 回答
0

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

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

于 2016-12-28T22:45:01.563 回答