【问题标题】:How to refer session variables in Groovy script in mule studio如何在 mule studio 中的 Groovy 脚本中引用会话变量
【发布时间】:2013-02-08 12:50:37
【问题描述】:

我刚开始使用 Mule。 流程说明: 我有一个 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 脚本中引用此会话值?

【问题讨论】:

    标签: mule


    【解决方案1】:

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

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

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

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

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

    它们在 Mule 3.5 的 Groovy 脚本中非常适合我。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 感谢您的回复!。我尝试了您的建议,但没有正确的结果。这是我得到的错误.....
      【解决方案3】:

      在将值作为 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
      

      【讨论】:

        【解决方案4】:
        #[groovy:message.getSessionProperty('sesVarValue')
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-22
            • 1970-01-01
            • 1970-01-01
            • 2012-04-23
            • 1970-01-01
            • 2014-10-23
            • 1970-01-01
            相关资源
            最近更新 更多