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>