2016-10-30 52 views
1

AmazonのAWS APIゲートウェイを、RESTを使用してフロントエンドの従来のSOAPサービスに使用しようとしています。私はリソースリクエストを受け取り、ボディマッピングテンプレートで基本的にハードコードSOAPリクエストを行うことができます。 SOAPサービスが呼び出され、XML SOAP応答が返されます。ここまでは順調ですね。XMLをJSON AWS API Gatewayに変換するにはどうすればよいですか?

インテグレーションレスポンスでは、この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>

ボディマッピングテンプレートで、私はこのような何かをしたい:

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

私はおそらくSOAPサービスを呼び出すためのラムダ関数を書くことができますが、それは妥当ではないようです。私は運が嫌いですか?

+1

@ paulsm4 AWS APIゲートウェイマッピングテンプレートを作成する際の質問です。変換はAPIゲートウェイサービス内で行われます。これはJavaScriptの質問ではなく、ブラウザで変換が行われていません。 –

答えて

5

APIゲートウェイは現在、XML応答本文の直接変換をサポートしていません。これは一般的に要求される機能であり、バックログにあるため、最終的に実装される可能性があります。その間、唯一のオプションは、SOAPバックエンドを呼び出してレスポンスを解析し、JSONをAPIゲートウェイに返すラムダ関数です。

+0

マイクを確認していただきありがとうございます! –

+1

@MikeD AWS API GatewayのJSONからXMLへの変換の現在の状態は何ですか? –

+2

まだ残っていますが、実装にはまだ優先順位がありません。 –

関連する問題