与主要运行的骡子jython

时间:2014-03-31 20:57:02

标签: java xml mule jython

  

问题:

如何在Mule应用程序中运行具有main函数的jython?

Issue:

我有一个由mule flow调用的简单Jython代码。

流速:

<mule xmlns:... 
   <flow name="wfileFlow1" doc:name="wfileFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/>
        <logger message="===\n START ===" level="INFO" doc:name="Logger"/>
        <scripting:component doc:name="Python">
            <scripting:script engine="jython" file="src/main/java/com/test/Test1.py"/>
        </scripting:component>
        <logger message="===\n END ===" level="INFO" doc:name="Logger"/>
    </flow>
</mule>
  

Test1.py

def add(a,b):
    return a+b

def addFixedValue(a):
  y = 5
  return y +a

print add(1,2)
print addFixedValue(1)

输出:

===\n START ===
3
6

===\n END ===

如果我使用main运行,则没有输出,即它不会打印任何内容。

  

Test1.py

def add(a,b):
    return a+b

def addFixedValue(a):
  y = 5
  return y +a

  if __name__ == '__main__':
      print add(3,4)
      print addFixedValue(1) 

它不打印任何jython值:

 ===\n START ===

 ===\n END ===

请注意,此处不会打印任何jython值。

问题是,因为第二个在Java中作为主程序运行,但是如果上面的流程错误,如何从mule应用程序运行主程序?

1 个答案:

答案 0 :(得分:0)

__name__变量为just a Python interpreter hack,用于执行主源文件中的部分(并在导入的模块中忽略它们)。在运行Jython脚本时,Mule将__name__的值设置为main,所以我想你可以这样做:

if __name__ == '__main__' or __name__ == 'main':