Sam*_*ato 2 xml json soap amazon-web-services 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
}
Run Code Online (Sandbox Code Playgroud)
想象一下,我的回答如下:
<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>Run Code Online (Sandbox Code Playgroud)
然后在Body Mapping Template中,我想做这样的事情:
#set($inputRoot = $input.path('$'))
{
"response-code" : "$input.Envelope.Body.getProdResponse.code",
"response-message" : "$input.Envelope.Body.getProdResponse.message"
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以写一个Lambda函数来调用SOAP服务,但这似乎并不合理.我运气不好吗?
API Gateway目前不支持XML响应主体的直接转换.这是一个常见的功能,在我们的待办事项上,因此最终可能会实施.与此同时,唯一的选择是向我们提供一个Lambda函数来调用SOAP后端,解析响应,并将JSON返回给API Gateway.
| 归档时间: |
|
| 查看次数: |
4150 次 |
| 最近记录: |