【问题标题】:WSO2 Response Message Mediator for AWS Lambda JSON response throws XMLStreamExceptionAWS Lambda JSON 响应的 WSO2 响应消息中介引发 XMLStreamException
【发布时间】:2021-05-24 12:38:07
【问题描述】:

我们在尝试在 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?这是某个地方的一些配置错误吗?

【问题讨论】:

    标签: aws-lambda wso2 mediator


    【解决方案1】:

    我在脚本调解器中遇到了与 [ENCODED JSON] 类似的问题,但在 WSO2 EI 产品中。但是,它们都是基于 apache-synapse 构建的,因此可能会将脚本语言从 js 更改为 nashornJs。 NashornJs,以不同的方式处理编码的 jsons。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 2018-02-28
      • 2020-03-15
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多