AWS Lambda JSON响应的WSO2响应消息中介抛出XMLStreamException &



我们在尝试在AWS Lambda上使用响应中介时遇到了一个问题。AWS Lambda使用官方的AWS API网关库,并有一个这种格式的响应。其中主体包含编码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和头文件,工作。读取body可以工作,但是当我们试图返回它时,我们得到:

<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>

为什么我们得到一个XMLStreamException,而我们试图解析JSON?这是某个配置错误吗?

我在脚本中介中有类似的问题[ENCODED JSON],但在WSO2 EI产品中。但是,它们都是基于apache-synapse构建的,所以可能会将脚本语言从js更改为nashornJs。而NashornJs则以不同的方式处理编码后的json。

最新更新