aws-lambda - AWS Lambda JSON 响应的 WSO2 响应消息中介引发 XMLStreamException
问题描述
尝试在 AWS Lambda 上使用响应调解器时遇到问题。AWS Lambda 使用官方的 AWS API Gateway 库,并具有这种格式的响应。其中 body 包含编码的 JSON。
{
"statusCode": 201,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": "{\"key\":\"value\" [MORE ENCODED JSON] }"
"isBase64Encoded": false
}
我们正在使用这样的脚本响应消息中介(这只是一个 PoC):
<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="ApiGatewayProxyResponseV2" trace="enabled" statistics="enable">
<log/>
<property name="messageType" value="application/json" type="STRING" scope="axis2"/>
<script language="js">
var payload = mc.getPayloadJSON();
var keys = Object.keys(payload);
mc.setPayloadJSON({
keys: keys,
myStatusCode:payload['statusCode'],
myBody:payload['body'],
myHeaders:payload['headers']
});
// todo set HTTP status code
</script>
</sequence>
读取和写入 statusCode 和 headers,工作正常。阅读正文有效,但是当我们尝试返回它时,我们得到:
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>601000</am:code>
<am:type>Status report</am:type>
<am:message>Runtime Error</am:message>
<am:description>javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,273]</am:description>
</am:fault>
为什么我们在尝试解析 JSON 时会收到 XMLStreamException?这是某处的一些配置错误吗?
解决方案
我在脚本调解器中遇到了与 [ENCODED JSON] 类似的问题,但在 WSO2 EI 产品中。但是,它们都是基于 apache-synapse 构建的,所以可能将脚本语言js
从nashornJs
. NashornJs 以不同的方式处理编码的 jsons。
推荐阅读
- java - 休眠 - 线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:0,大小:0
- spring-cloud-stream - Spring cloud sleuth with Spring 云流
- listview - ListView 中的 WebView 未分配其尺寸
- timezone - 难以从片刻中减去时间
- mysql - MySQL join 查询只有一行与引用表
- android - FirestorePagingAdapter 是否一次获取页面中的文档或所有文档然后应用分页?
- c++ - C++:setw() 只在第一行工作,在循环中
- jquery - Jquery:基于行跨长度的新类添加问题
- java - 将 onTouch 事件中文本的背景颜色更改为相应的标签
- ios - UICollectionViewCell 在 UICollectionViewReusableView 宽度之后开始