Apache Synapse 中没有 setPayloadJSON()
No setPayloadJSON() in Apache Synapse
我一直在试用 Apache Synapse 并尝试使用 JavaScript 中介来设置 JSON 有效负载。但是 ScriptMessageContext class 不包含任何读取 JSON 有效载荷或设置 JSON 有效载荷的方法。但是在 WSO2 中有很多设置和获取 JSON Payload 的例子,例如 mc.getPayloadJSON();
和 mc.setPayloadJSON(response)
。无论如何在 Apache Synapse 中解决这个问题?
我找到了 myself.Synapse 的答案,通过将每个数据转换为 soap.So 来处理每个数据,首先我需要将流程转换为 soap。然后使用 javascript 处理数据并使用 xslt 将脚本转换回 json。
显示了完整的 xml 代码 below.Here 我使用突触作为代理从另一台服务器发送获取响应。然后来自 api 的数据被转换为 soap,然后在 javascript 中处理,然后从 soap 转换回 json 并发送回客户端。
<definitions xmlns="http://ws.apache.org/ns/synapse">
<localEntry key="jsonScript" src="file:repository/conf/sample/resources/script/sampleJson.js"/>
<proxy name="SampeJsonProxy">
<target>
<endpoint>
<address uri="http://localhost:8081/kafka/publish/hello" format="json" methods="GET"/>
</endpoint>
<inSequence>
<log level="full"/>
</inSequence>
<outSequence>
<xslt key="in_transform"/>
<property name="messageType" scope="axis2" value="text/xml"/>
<script language="js" key="jsonScript" function="transformResponse"/>
<xslt key="out_transform"/>
<property name="messageType" scope="axis2" value="application/json"/>
<send/>
</outSequence>
</target>
</proxy>
<localEntry key="in_transform">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:m0="http://services.samples" version="2.0" exclude-result-prefixes="m0 fn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://services.samples">
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
</localEntry>
<localEntry key="out_transform">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
</localEntry>
</definitions>
我一直在试用 Apache Synapse 并尝试使用 JavaScript 中介来设置 JSON 有效负载。但是 ScriptMessageContext class 不包含任何读取 JSON 有效载荷或设置 JSON 有效载荷的方法。但是在 WSO2 中有很多设置和获取 JSON Payload 的例子,例如 mc.getPayloadJSON();
和 mc.setPayloadJSON(response)
。无论如何在 Apache Synapse 中解决这个问题?
我找到了 myself.Synapse 的答案,通过将每个数据转换为 soap.So 来处理每个数据,首先我需要将流程转换为 soap。然后使用 javascript 处理数据并使用 xslt 将脚本转换回 json。 显示了完整的 xml 代码 below.Here 我使用突触作为代理从另一台服务器发送获取响应。然后来自 api 的数据被转换为 soap,然后在 javascript 中处理,然后从 soap 转换回 json 并发送回客户端。
<definitions xmlns="http://ws.apache.org/ns/synapse">
<localEntry key="jsonScript" src="file:repository/conf/sample/resources/script/sampleJson.js"/>
<proxy name="SampeJsonProxy">
<target>
<endpoint>
<address uri="http://localhost:8081/kafka/publish/hello" format="json" methods="GET"/>
</endpoint>
<inSequence>
<log level="full"/>
</inSequence>
<outSequence>
<xslt key="in_transform"/>
<property name="messageType" scope="axis2" value="text/xml"/>
<script language="js" key="jsonScript" function="transformResponse"/>
<xslt key="out_transform"/>
<property name="messageType" scope="axis2" value="application/json"/>
<send/>
</outSequence>
</target>
</proxy>
<localEntry key="in_transform">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:m0="http://services.samples" version="2.0" exclude-result-prefixes="m0 fn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://services.samples">
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
</localEntry>
<localEntry key="out_transform">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
</localEntry>
</definitions>