首页 > 解决方案 > Apache Synapse 中没有 setPayloadJSON()

问题描述

我一直在尝试使用 Apache Synapse 并尝试使用 JavaScript 中介来设置 JSON 有效负载。但是 ScriptMessageContext 类不包含任何读取 JSON 有效负载或设置 JSON 有效负载的方法。mc.getPayloadJSON();但是已经有很多在 WSO2 中设置和获取 JSON Payload 的示例,例如mc.setPayloadJSON(response). 无论如何在Apache Synapse中解决这个问题?

标签: javascriptwso2synapse

解决方案


我自己找到了答案。Synapse 通过将数据转换为肥皂来处理每个数据。所以首先我需要将流蝇转换为肥皂。然后使用 javascript 处理数据并使用 xslt 将脚本转换回 json。完整的 xml 代码如下所示。这里我使用 synapse 作为代理从另一台服务器发送 get 响应。然后来自该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>


推荐阅读