wso2 - 使用 wso2 esb multipart /form 数据
问题描述
在 wso2 ESB 中,当 ESB API 的 multipart/formdata 请求到来时,我想先存储请求,然后再使用该属性。
下面是 API 代码。
<api context="/multi" name="multi" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST">
<inSequence>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
<property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
<property name="ContentType" scope="axis2" type="STRING" value="multipart/form-data"/>
<respond/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
Request:
key : file value:image
key : json value:{"a":"b"}
我得到的回应是正确的:
--MIMEBoundary_9e01467992befaaccfd1aa25f3e48a26d18d37e547e64c30
Content-Disposition: form-data; name="file"; filename="file.png"
Content-Type: image/png; charset=ISO-8859-1
Content-Transfer-Encoding: binary
--MIMEBoundary_9e01467992befaaccfd1aa25f3e48a26d18d37e547e64c30
Content-Disposition: form-data; name="json"
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 8bit
sdkjahkshdkkhk..............(Image)
{ "a":"b"}
--MIMEBoundary_9e01467992befaaccfd1aa25f3e48a26d18d37e547e64c30--
但是因为我想处理具有多部分请求的 json 有效负载的属性调解器,以便以后使用并转换为多部分格式,所以如果我使用下面的 API 代码,我会得到错误的响应。
<api context="/multi" name="multi" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST">
<inSequence>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
<property expression="json-eval($.)" name="inputPayLoad" scope="default" type="STRING"/>
<script language="js"><![CDATA[var rp = mc.getProperty("inputPayLoad");
mc.setPayloadJSON(rp);]]></script>
<property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
<property name="ContentType" scope="axis2" type="STRING" value="multipart/form-data"/>
<respond/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
但我得到的回应是
--MIMEBoundary_9e01467992befaacae1a7a25f3e48a26818d37e547e64c30
Content-Disposition: form-data; name="mediate"
Content-Type: application/xml; charset=US-ASCII
Content-Transfer-Encoding: 8bit
<mediate><file>iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOj........./file><json>{ "a":"b"}</json></mediate>
--MIMEBoundary_9e01467992befaacae1a7a25f3e48a26818d37e547e64c30--
两个响应之间存在差异,但是转换为 multipart/formdata 格式(属性中介)之前的请求都一样
{
"mediate":{
"file":"dksad..",
"json":"{"a":"b"}"
}
}
但我不明白为什么 ESB 在转换为多部分之前对相同的请求(json)给出不同的响应。
解决方案
您得到的响应是 base64 编码的,您可以使用 base64 解码器对其进行解码并查看响应
推荐阅读
- apache-spark - 是否有为针对 Hadoop 集群运行的 Spark 客户端设置 Kerberos 身份验证的分步过程?
- reactjs - 如何将节点作为道具传递给 React 中的组件?
- javascript - 如何获得不可变对象的密钥?
- yarnpkg - 在 Yarn 中添加要点
- c++ - 无法将结构指针转换为 PUCHAR
- selenium - IntelliJ IDEA Selenium 插件运行配置异常:“仅允许本地连接”
- python - 将颜色映射到 plotly go.Pie 图中的标签
- java - ActiveMQ Artemis 和 Logstash JMX 输入
- python - Python 将 csv 字符串转换为 Pandas DataFrame
- r - 尝试在 ggplot2 中创建 2 x 12 热图“美学必须是长度 1 或与数据相同 (12):x”