3

Mule を使い始めたばかりです。フローの説明: HTTP インバウンド エンドポイントで XML メッセージを受信し、XML ペイロードを使用してデータベース (derby) を更新します。例: リクエストで Emp Id と Emp name、Exp を受け取ります。これらの値でテーブルを更新する必要があります。

私の実装:

XML 入力を受け取った後、メッセージ プロパティ トランスフォーマーを使用して値をセッション スコープに保存しています。

 <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 (ヌル)
 行 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 に答える