【问题标题】:How to call python script file from wso2 proxy services如何从 wso2 代理服务调用 python 脚本文件
【发布时间】:2019-04-07 06:47:32
【问题描述】:

如何从 wso2 代理服务调用 python 脚本文件。

我们尝试使用 send mediator 调用位于我本地机器中的 python 脚本文件。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="FilepythonTest"
       transports="http https"
       startOnLoad="true">
   <description/>
   <target >
      <inSequence>
         <send>
            <endpoint>
               <address uri="local:///Users/vikashsaharan/Desktop/python/testpy.py"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <log level="full"/>
      </outSequence>
   </target>
</proxy>

我们无法通过此通话进行通话。请指导我如何从 wso2 调用 python 脚本

【问题讨论】:

    标签: wso2 wso2esb wso2ei


    【解决方案1】:

    WSO2 EI 具有使用Script mediator 执行python 脚本的内置功能。以下是示例配置。

    **sample api configuration** 
    
    <api xmlns="http://ws.apache.org/ns/synapse" name="api" context="/api-context">
       <resource methods="POST GET">
          <inSequence>
             <log level="full">
                <property name="Message" value="Before transformation"/>
             </log>
             <script language="py" key="conf:/repository/script/stockquoteTransformResponse.py" function="transformRequest"/>
             <log level="full">
                <property name="Message" value="After transformation"/>
             </log>
             <respond/>
          </inSequence>
       </resource>
    </api>

    **stockquoteTransformResponse.py file saved in carbon registry.**
    
    from org.apache.synapse.util.xpath import SynapseXPath
    
    def transformRequest(mc):
        symbolXPath = SynapseXPath("//*[local-name()='Code']/text()")
        symbol = symbolXPath.stringValueOf(mc)
        mc.setPayloadXML('''
    	<m:getQuote xmlns:m="http://services.samples">
    		<m:request>
    			<m:symbol>''' + symbol + '''</m:symbol>
    		</m:request>
    	</m:getQuote>''')

    我们需要将 jython jar 添加到 WSO2EI_HOME/lib 目录。这是使用来自http://central.maven.org/maven2/org/python/jython/2.2.1/jython-2.2.1.jar的 jython-2.2.1.jar 测试的

    调用上述 api 后,可以看到以下输出。

    【讨论】:

    • 我们只能用于有效载荷集或每个 python 功能。
    【解决方案2】:

    您可以使用class mediator 并从那里执行python 脚本。以下是一个可以执行此操作的示例类中介器。

    public boolean mediate(MessageContext context) { 
            String command = "python /path/to/script.py";
            try {
                Process p = Runtime.getRuntime().exec(command);
                BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String ret = in.readLine();
                System.out.println("value is : "+ret);
            } catch (IOException e) {
                // handle exception
            }
            return true;
        }
    

    您可以参考Running a .py file from Java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多