我在 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>
我已通读Script Component Reference和Scripting Module Reference - 模块参考似乎有一些相关信息,但我不知道如何在 Python 中使用它。
我还阅读了一篇关于“Mule Punching”的文章,如果我运行的是 Mule 的第 2 版,它似乎可以回答我的问题。我尝试在我的 Mule 3 项目中使用相同的技术,但没有奏效。
编辑 24/07/2012
使用@ppiixx 的回复,我对 Python 脚本有了更深入的了解。
例如,只有一行代码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 中的示例,所以我不确定我哪里出错了。