如何将XML转换为JSON AWS API Gateway?

时间:2016-10-30 00:30:58

标签: json xml amazon-web-services soap aws-api-gateway

我正在尝试使用Amazon的AWS API网关来使用REST来支持传统的SOAP服务。我能够在Body Mapping Template中获取资源请求并基本上硬编码SOAP请求。调用SOAP服务并返回XML SOAP响应。到目前为止一切都很好。

在Integration Response中,我需要使用这个SOAP信封(基本上只是XML)并将其映射回JSON模型。我不知道如何做到这一点,但我必须遗漏一些东西。以下代码将获得原始响应,但我没有看到任何方法来访问元素:

#set($inputRoot = $input.path('$'))
{
 $input.body
}

想象一下,我的回答如下:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:getProdResponse xmlns:ns1="urn:productlist">
         <code xsi:type="xsd:string">100</return>
         <message xsi:type="xsd:string">this is a book</return>
      </ns1:getProdResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

然后在Body Mapping Template中,我想做这样的事情:

#set($inputRoot = $input.path('$'))
{
    "response-code" : "$input.Envelope.Body.getProdResponse.code",
    "response-message" : "$input.Envelope.Body.getProdResponse.message"
}

我知道我可以编写一个Lambda函数来调用SOAP服务,但这似乎并不合理。我运气不好吗?

1 个答案:

答案 0 :(得分:6)

API Gateway目前不支持XML响应主体的直接转换。这是一个常见的功能,在我们的待办事项上,因此最终可能会实施。与此同时,唯一的选择是我们使用Lambda函数来调用SOAP后端,解析响应,并将JSON返回给API网关。