如何从 wso2 代理服务调用 python 脚本文件
How to call python script file from wso2 proxy services
如何从 wso2 代理服务调用 python 脚本文件。
我们尝试使用发送调解器来调用位于我本地计算机中的 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 脚本
您可以使用 class mediator 并从那里执行 python 脚本。以下是可以执行此操作的 class 调解器示例。
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
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 目录。这是用 jython-2.2 测试的。1.jar 来自 http://central.maven.org/maven2/org/python/jython/2.2.1/jython-2.2.1.jar
一旦我们调用上面的api,就可以看到以下输出。
如何从 wso2 代理服务调用 python 脚本文件。
我们尝试使用发送调解器来调用位于我本地计算机中的 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 脚本您可以使用 class mediator 并从那里执行 python 脚本。以下是可以执行此操作的 class 调解器示例。
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
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 目录。这是用 jython-2.2 测试的。1.jar 来自 http://central.maven.org/maven2/org/python/jython/2.2.1/jython-2.2.1.jar
一旦我们调用上面的api,就可以看到以下输出。