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