SOAP API プロキシの構築

API Manager 2.x では、SOAP ベースの Web サービスに SOAP API プロキシを使用できます。SOAP プロキシには、バックエンドサービスを説明する WSDL 定義が必要です。WSDL は、API プロキシが受信要求の検証を実行し、対応する API エンドポイントのアウトバウンド要求を適切に転送する方法を定義します。

SOAP プロキシスキーマの検証

API に対する検証が有効かどうかに関係なく、SOAP 要求検証機能で常に次の点が確認されます。

  • インバウンド要求に有効な SOAP アクションが設定されている。

  • ペイロードが有効な SOAP エンベロープである。

API に対する検証が有効の場合は、SOAP 要求検証機能で、​body​ タグのコンテンツが WSDL で定義されているものと一致しているかどうかも確認されます。インバウンド要求の SOAP アクションが WSDL の同じ名前の操作と照合されます。その後、要素の名前空間 URI と操作に関連付けられた名前が受信要求の同じ詳細と一致することがプロキシによって検証されます。

この検証に失敗した場合、必要な名前空間 URI と要素名を通知するエラーメッセージが生成されます。インバウンド要求の SOAP アクションが空の場合、アプリケーションは名前空間 URI と受信要求要素の要素名を WSDL で定義されたすべての操作と照合します。

受信要求と一致する最初の操作により、検証が成功したかどうかが決まります。照合に失敗した場合、要求の要素の推奨タグ名を含むエラーメッセージが生成されます。

プロキシアプリケーションからの WSDL の取得

SOAP プロキシを使用すると、バックエンド Web サービスは要求を送信 (POST) したり、サービス WSDL を取得 (GET) したりできます。GET 要求は、クエリパラメーターとして ​wsdl​ または ​WSDL​ を使用する HTTP GET メソッドによって実行されます。

基本認証ログイン情報を使用したリモートロケーションからの WSDL の設定

basicauth.properties​ 設定ファイルで ​basic.auth.user​ および ​basic.auth.password​ アプリケーションプロパティを設定することで、リモートロケーションでホストされている保護された WSDL にアクセスできます。次に、これらのプロパティはバリデーターモジュールに渡されます。

<soap-request-validator:config name="validator-config" wsdlLocation="http://myremoteurl:9092/service?wsdl" serviceName="myServiceName"
                                   servicePort="myServicePort" schemaValidationEnabled="true"
                                   basicAuthUser="${basic.auth.user}" basicAuthPassword="${basic.auth.password}"/>
xml

これらのプロパティで認証値を指定しない場合、WSDL は認証されずに取得されます。

TLS を使用した WSDL の取得

SOAP プロキシ v2.1.0 を使用すると、デフォルトで TLS コンテキスト設定を使用してリモートロケーションから WSDL を取得できます。この操作で使用する TLS コンテキストは、プロキシのアウトバウンド設定と同じです。

SOAP プロキシを設定する

SOAP プロキシを設定するには、以下の手順を完了します。

  1. [Anypoint Platform]​ > ​[API Manager]​ に移動します。

  2. [API Administration (API 管理)]​ で、​[Add API (API を追加)]​ をクリックし、​[Add new API (新しい API を追加)]​ をクリックします。

  3. ランタイムとして ​[Mule Gateway (Mule ゲートウェイ)]​ を選択します。

  4. [Proxy type (プロキシ種別)]​ で ​[Deploy a proxy application (プロキシアプリケーションをデプロイ)]​ を選択します。

  5. プロキシアプリケーションのデプロイを選択した場合は、以下のオプションから​対象種別​を選択します。

    • CloudHub 2.0​: コンテナベースのクラウドインフラストラクチャで MuleSoft によってホストされている Mule Runtime を使用する場合は、このオプションを選択します。CloudHub 2.0 プロキシには、デフォルトで 0.1 vCore の CPU が含まれています。

      1. スペースを選択します。

        スペースについての詳細は、​『共有スペース』 and 『非公開スペース』​を参照してください。

      2. [Runtime Version (ランタイムバージョン)]​ で、次の操作を実行します。

        1. [Runtime Channel (ランタイムチャネル)]​ を選択します。

        2. Mule Runtime の ​[Version (バージョン)]​ を選択します。

        3. [Java version (Java バージョン)]​ を選択します。

      3. [Proxy app name (プロキシアプリケーション名)]​ を入力します。

    • CloudHub:​ MuleSoft によってクラウドでホストされている Mule Runtime を使用する場合は、このオプションを選択します。CloudHub プロキシには、デフォルトで 0.1 vCore の CPU と 500 MB のメモリが含まれています。

      1. [Runtime Version (ランタイムバージョン)]​ で、次の操作を実行します。

        1. [Runtime Channel (ランタイムチャネル)]​ を選択します。

        2. Mule Runtime の ​[Version (バージョン)]​ を選択します。

        3. [Java version (Java バージョン)]​ を選択します。

      2. [Proxy app name (プロキシアプリケーション名)]​ を入力します。

    • Hybrid (ハイブリッド):​ Runtime Manager に登録されているオンプレミスサーバーで実行される Mule Runtime インスタンスを使用する場合、このオプションを選択します。

      詳細は、​「Runtime Manager でのサーバーの登録」​を参照してください。

      1. リストから接続先を選択するか、​[Add server (サーバーを追加)]​ をクリックします。

      2. [Proxy app name (プロキシアプリケーション名)]​ を入力します。

    • Self-managed Server (自己管理型サーバー):​ JAR ファイルを作成して、Runtime Manager に登録されていないオンプレミスサーバーで実行される Mule Runtime インスタンスに API プロキシをデプロイする場合、このオプションを選択します。詳細は、『On-Premises Deployment Model』を参照してください。

API Manager で API プロキシを自己管理型サーバーにデプロイしても、プロキシはオンプレミスサーバーにデプロイされません。API Manager でプロキシをデプロイした後に、プロキシをオンプレミスサーバーにデプロイします。 . 『新しい API プロキシ JAR ファイルをダウンロードします』​。 . 『JAR ファイルをオンプレミスサーバーにデプロイします』​。

  • Runtime Fabric:​ Runtime Fabric で管理された Mule Runtime Engine に API プロキシをデプロイする場合、[Runtime Fabric] を選択します。 詳細は、​「Runtime Fabric への API プロキシのデプロイ」​を参照してください。

    1. リストから対象を選択します。

    2. [Runtime Version (ランタイムバージョン)]​ で、次の操作を実行します。

      1. [Runtime Channel (ランタイムチャネル)]​ を選択します。

      2. Mule Runtime の ​[Version (バージョン)]​ を選択します。

      3. [Java version (Java バージョン)]​ を選択します。

    3. [Proxy app name (プロキシアプリケーション名)]​ を入力します。

      1. 以下のオプションから API を選択します。

  • 管理する API を Exchange を介して共有している場合、​[Select API from Exchange (Exchange から API を選択)]​ をクリックします。

    1. [Select API (API を選択)]​ の下のリストから API をクリックします。必要に応じて、特定の API を検索できます。

    2. 最新バージョンを使用していない場合は、​[Asset type (アセットタイプ)]​、​[API version (API バージョン)]​、および ​[Asset version (アセットバージョン)]​ を更新します。

      Exchange でのバージョンについての詳細は、『アセットバージョン』を参照してください。

    3. [RAML/OAS]​ アセットタイプを選択した場合は、API の ​[Conformance Status (準拠状況)]​ を表示して、API が準拠していることを確認します。​[Conformance Status (準拠状況)]​ が非準拠の場合、デプロイ後に​ガバナンスレポート​を表示して、準拠の問題を見つけて修正します。​ガバナンスレポート​についての詳細は、『API インスタンスの管理』を参照してください。

  • [Create new API (新しい API を作成)]​ をクリックします。

    1. 新しい API アセットの​名前​を入力します。

    2. アセットタイプ​として ​SOAP API​ を選択します。

    3. メソッドとして、​[Upload a WSDL (WSDL をアップロード)]​ または ​[Use an external link (外部リンクを使用)]​ を選択します。

    4. 必要に応じて、​[Asset type (アセットタイプ)]​、​[API version (API バージョン)]​、および ​[Asset version (アセットバージョン)]​ 項目を更新します。

      1. [Next (次へ)]​ をクリックします。

      2. ダウンストリーム設定を定義します。

      3. [Next (次へ)]​ をクリックします。

      4. アップストリーム設定を定義します。

      5. [Next (次へ)]​ をクリックします。

      6. 選択内容を確認し、必要に応じて編集します。

      7. デプロイする準備ができたら、​[Save & Deploy (保存してデプロイ)]​ をクリックします。または、​[Save (保存)]​ を選択して API インスタンスを保存し、後でデプロイします。

XSD ファイルでインポートが見つからない場合の SOAP プロキシのトラブルシューティング

不適切な WSDL 定義が原因で、SOAP プロキシがデプロイメント中に失敗する場合があります。たとえば次のエラーは、WSDL の一部である XSD ファイルの 1 つにインポートが見つからないことを示しています。

org.xml.sax.SAXParseException; systemId: http://localhost:8080/?wsdl304785538;
lineNumber: 2; columnNumber: 52; src-resolve.4.2: Error resolving component
'myNamespace:myElement’. It was detected that 'myNamespace:myElement' is in namespace
'http://my.namespace.url', but components from this namespace are not referenceable
from schema document 'http://localhost:8080/?wsdl304785538'. If this is the incorrect
namespace, perhaps the prefix of 'myNamespace:myElement' needs to be changed. If this
is the correct namespace, then an appropriate 'import' tag should be added to
'http://localhost:8080/?wsdl304785538'.
text

この問題は、WSDL ファイルで使用されている要素の定義が、現在の WSDL ファイルの名前空間とは異なる名前空間を使用する外部 XSD 内にある場合に発生します。

この問題は、適切なインポートを WSDL ファイルに追加することで解決できます。たとえば、前の例での例外の場合、WSDL ファイルの ​types​ 要素に次のインポートが含まれている必要があります

<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://my.namespace.url" schemaLocation="myXSDFile.xsd"/>
</schema>
</types>
text