2

Mule スクリプトを使用すると、Groovy、JavaScript、および Jython でmessage変数を介して Mule メッセージにアクセスできます。JRuby では、次のことはできません。

undefined local variable or method `message' for main:Object (NameError)

Mule のドキュメントもインターネットも、これについて何も述べていません。Ruby からメッセージにアクセスするにはどうすればよいですか?

コード

<scripting:transformer name="SetData" doc:name="Set Data">
    <scripting:script engine="jruby">
        <scripting:text><![CDATA[File.open('/tmp/foo', 'w') { |f| f.puts message.payload }]]></scripting:text>
    </scripting:script>
</scripting:transformer>
4

1 に答える 1

2

ラバにバインドされた変数は最終的にグローバルスコープに含まれるため、で参照する必要があります$name

あなたの場合:

<scripting:transformer name="SetData" doc:name="Set Data">
    <scripting:script engine="jruby">
        <scripting:text><![CDATA[
           File.open('/tmp/foo', 'w') { |f| f.puts $message.payload }
        ]]></scripting:text>
    </scripting:script>
</scripting:transformer>

メッセージペイロードのみが必要な場合は、の$payload代わりにを使用することに注意してください$message.payload

また、トランスフォーマーはコンポーネントIMOのように見えます。つまり、データを変換するのではなく、データに作用します(ファイルに書き込みます)。File.open明確な戻り値すらありません( Muleでの戻り値を処理したくないのは確かです。したがって、scripting:componentここではより適切な値になります。

最後に、ファイルへの書き込みだけが必要な場合は、それを実行するMuleからのファイルアウトバウンドエンドポイントを使用できます。

于 2012-05-02T18:50:48.743 に答える