2

Mule でスクリプトを書き始めるのにかなり苦労しています。正直なところ、私は最初のハードルに落ちています。ペイロードにアクセスする方法やフローにデータを返す方法を説明するドキュメントが見つかりません。

Jython 2.5 と Mule 3.4 を使用しています。

私のフローは非常に単純です。Ajax ソースからいくつかのテキストを取得し、それを単純にエコーします。現時点では、Python スクリプトは何も実行しません (ペイロードで何かを実行する方法がわからないため)。

<flow name="Python Script" doc:name="Python Script">
    <ajax:connector name="connector-ajax" serverUrl="http://192.168.0.1:8000" resourceBase="C:\mule\workspace\scripting\src\main\app\docroot" doc:name="Ajax" />
    <scripting:component doc:name="Python">
        <scripting:script engine="jython" file="C:\mule\workspace\scripting\src\main\app\python\myscript.py"/>
    </scripting:component>
    <echo-component doc:name="Echo"/>
</flow>

スクリプト コンポーネント リファレンススクリプト モジュール リファレンスを読みました。モジュール リファレンスには関連情報が含まれているようですが、Python での使用方法がわかりません。

また、Mule のバージョン 2 を実行していれば私の質問に答えてくれるように思われる「Mule Punching」に関する記事も読みました。Mule 3 プロジェクトで同じ手法を使用しようとしましたが、うまくいきませんでした。

編集 2012 年 7 月 24 日

@ppiixx の応答を使用して、Python スクリプトをもう少し進めました。

たとえば、コードが 1 行だけの場合return len(payload)、Jython インタープリターreturnは関数の外に存在できないため、エラーをスローします。当たり前ですが、それが標準です。

ただし、コードでは

def main():
  return len(payload)

main()

「クラス org.mule.transport.NullPayload のシリアライザーが見つかりません」というエラーが表示されます。

ログは以下のとおりです。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Started app 'python-test'                                +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
INFO  2013-07-24 09:16:08,821 [[python-test].flow.stage1.02] org.mule.component.simple.LogComponent: 
********************************************************************************
* Message received in service: flow. Content is: '{NullPayload}'               *
********************************************************************************
ERROR 2013-07-24 09:16:08,849 [[python-test].flow.stage1.02] org.mule.exception.CatchMessagingExceptionStrategy: 
********************************************************************************
Message               : No serializer found for class org.mule.transport.NullPayload and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (org.codehaus.jackson.map.JsonMappingException)
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. No serializer found for class org.mule.transport.NullPayload and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (org.codehaus.jackson.map.JsonMappingException)
  org.codehaus.jackson.map.ser.impl.UnknownSerializer:52 (null)
2. No serializer found for class org.mule.transport.NullPayload and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (org.codehaus.jackson.map.JsonMappingException) (org.mule.api.transformer.TransformerException)
  org.mule.module.json.transformers.ObjectToJson:107 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)

returnこれにより、フローにデータを返すには、単独で使用するだけでは不十分だと思います。

スクリプト モジュール リファレンスを読みましたが、Groovy の例は示されていますが、Python の例は示されていません。そのため、どこが間違っているのかわかりません。

4

1 に答える 1