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}"/>

これらのプロパティで認証値を指定しない場合、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 (ランタイムバージョン)]​ を選択します。

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

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

      1. [Runtime version (ランタイムバージョン)]​ を選択します。

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

    • Hybrid (ハイブリッド):​ 使用するオンプレミスサーバーで Mule Runtime を実行している場合、[Hybrid (ハイブリッド)] を選択します。 詳細は、​「Runtime Manager でのサーバーの登録」​を参照してください。

      自己管理型サーバーで API を実行している場合、​従来の API 作成フロー​を使用して API を管理します。

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

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

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

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

      2. [Runtime version (ランタイムバージョン)]​ を選択します。

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

  6. 以下のオプションから 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 (アセットバージョン)]​ 項目を更新します。

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

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

    設定を確認するには展開します。
    項目名 説明 必須 注意事項

    Protocol (プロトコル)

    検証に HTTP と HTTPS のどちらを使用するかを指定します。

    はい

    HTTPS を選択する場合、インバウンドトラフィックの TLS コンテキストを指定します。

    Inbound TLS (インバウンド TLS)

    インバウンドトラフィックを保護するための TLS コンテキストを指定します。

    いいえ

    Mule 4 以降でのみ使用できます。コンテキストを表示できない場合は、適切な権限があることを確認してください。Mule 3 環境で HTTPS を有効にするには、​「Mule 3x での HTTPS の有効化」​を参照してください。

    Port (ポート)

    表示されたポートが正しくない場合に使用する番号を指定します。

    はい

    Base Path (ベースパス)

    ホストルートに相対的なすべての API パスの URL プレフィックスを指定します。スラッシュ ​/​ で始まる必要があります。

    はい

    Instance label (インスタンス表示ラベル)

    API の表示ラベルを指定します。

    いいえ

    同じ API の複数の管理インスタンスがある場合、各インスタンスを他のインスタンスと区別するための表示ラベルを追加します。

    Advanced Options (詳細オプション)

    Consumer endpoint (コンシューマーエンドポイント)

    コンシューマーが要求の送信に使用するプロキシアプリケーションのアドレスを指定します。

    いいえ

    Client provider (クライアントプロバイダー)

    API のクライアントプロバイダーを指定します。

    はい

    Anypoint Platform はデフォルトではクライアントプロバイダーとして機能します。外部クライアントプロバイダーを設定するには、​「クライアントプロバイダー」​を参照してください。

    Request Timeout (要求タイムアウト)

    要求がタイムアウトするまでの期間を指定します。

    いいえ

    Proxy Version (プロキシバージョン)

    エンドポイントに使用するプロキシのバージョンを指定します。

    いいえ

    Service Name (サービス名)

    WSDL サービスの名前。

    はい

    WSDL API でのみ使用できます。

    Service Port (サービスポート)

    WSDL サービスのポート。

    はい

    WSDL API でのみ使用できます。

    Service Namespace (サービス名前空間)

    WSDL サービスの名前空間。

    はい

    WSDL API でのみ使用できます。

    Enable Console (コンソールを有効化)

    API 仕様を公開およびテストできるかどうかを指定します。

    いいえ

    [Console Path (コンソールパス)]​ に別のパス (​/spec/*​ など) を指定できます。関連付けられた API 定義がある場合にのみ使用できます。Mule 3 以降でのみ使用できます。

    Validations (検証)

    提供された仕様に対してインバウンド要求を検証するかどうかを指定します。

    いいえ

    関連付けられた API 定義がある場合にのみ使用できます。Mule 3 以降でのみ使用できます。

    厳格な検証 (省略可能)

    クエリパラメーターに対してインバウンド要求を検証するかどうかを指定します。

    いいえ

    関連付けられた API 定義がある場合にのみ使用できます。Mule 3 以降でのみ使用できます+

    User Domain (ユーザードメイン)

    API ゲートウェイドメインを使用するかどうかを指定します。

    いいえ

    設定で以前にプロキシデプロイメント対象として ​[Hybrid (ハイブリッド)]​ を選択した場合は、必ずこのオプションを選択してください。Mule 3.8 以降の API ゲートウェイドメインをインストールする必要があります。

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

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

    設定を確認するには展開します。
    項目名 説明 必須 注意事項

    Upstream URL (アップストリーム URL)

    プロキシまたは API にアクセスするための URL。

    はい

    たとえば、Exchange の API アセットの URL を使用できます。

    Outbound TLS (アウトバウンド TLS)

    アウトバウンドトラフィックを保護するための TLS コンテキストを指定します。

    いいえ

    Mule 4 以降でのみ使用できます。コンテキストを表示できない場合は、適切な権限があることを確認してください。

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

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

  13. デプロイする準備ができたら、​[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'.

この問題は、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>