javascript - Apache Synapse 中没有 setPayloadJSON()
问题描述
我一直在尝试使用 Apache Synapse 并尝试使用 JavaScript 中介来设置 JSON 有效负载。但是 ScriptMessageContext 类不包含任何读取 JSON 有效负载或设置 JSON 有效负载的方法。mc.getPayloadJSON();
但是已经有很多在 WSO2 中设置和获取 JSON Payload 的示例,例如mc.setPayloadJSON(response)
. 无论如何在Apache Synapse中解决这个问题?
解决方案
我自己找到了答案。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>
推荐阅读
- ios - 可以使用 CATransform3D 获取 Face Mesh 中的眼睛大小尺寸吗?
- docker-compose - 在“sudo apt install docker-compose”时获取以下错误信息
- amazon-web-services - 如何授予用户从控制台访问 AWS Elastic Beanstalk 日志的权限
- batch-file - 如何制作具有多个其他条件的批处理文件?
- python-2.7 - Python:获取动态TextInput的ID
- android - 网格视图项目没有向下滚动(重复项目)以及当我从 android 中的服务器加载数据时?
- office365 - 调用 Graph API /beta/me/joinedTeams 失败
- javascript - Bootstrap:Multiselect:Onchange取消选中复选框
- angular - 错误:该组还没有注册表单控件。如果您使用的是 ngModel,您可能需要检查下一个刻度(例如使用 setTimeout)
- c++ - 在洋葱类中搜索