Нет setPayloadJSON() в Apache Synapse

Я пробовал Apache Synapse и пытался использовать посредник JavaScript для установки полезной нагрузки JSON. Но класс ScriptMessageContext не содержит никакого метода для чтения полезных данных JSON или установки полезных данных JSON. Но было множество примеров установки и получения полезных данных JSON в WSO2, таких как mc.getPayloadJSON(); и mc.setPayloadJSON(response). Есть ли способ обойти это в Apache Synapse?


person pacman    schedule 10.02.2021    source источник
comment
Синапс WSO2 — это разветвленная версия Apache Synapse, в которой реализовано несколько функций. Следовательно, существует значительное количество функциональных пробелов между синапсом Apache Synapse и синапсом WSO2.   -  person Arunan Sugunakumar    schedule 11.02.2021
comment
@ArunanSugunakumar Можно ли как-то решить эту проблему в синапсе? Каким-то образом я могу взять эту полезную нагрузку json и обработать ее, создать полезную нагрузку xml, а затем преобразовать ее обратно в json?   -  person pacman    schedule 11.02.2021


Ответы (1)


Я нашел ответ для себя. Synapse обрабатывает все данные, преобразовывая их в мыло. Итак, сначала мне нужно было преобразовать поток в мыло. Затем обработал данные с помощью javascript и преобразовал скрипт обратно в json с помощью xslt. Полный код xml показан ниже. Здесь я использовал synapse в качестве прокси для отправки ответа на запрос с другого сервера. затем данные из этого API преобразуются в мыло, а затем обрабатываются в javascript, преобразуются обратно из мыла в 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>

person pacman    schedule 11.02.2021