SOAP Web サービスソース¶
ここでは、以下の手順について説明します。
SOAP Web サービスを参照するデータソースの作成
SOAP Web サービスの操作リクエストを送信する基本ビューの作成
SOAP Web サービスソースのインポート¶
新しい Web サービスデータソースを作成するには、[Server Explorer] でデータベースを右クリックして、[New] > [Data source] > [Web service] の順にクリックします。
新しい Web サービスデータソースを作成するためのダイアログが表示されます。
以下のフィールドに値を入力します。
Name: 新しいデータソースの名前。ここの例では、新しいデータソースの名前は「sales」です。
WSDL: Web サービス仕様が記述されている WSDL ファイルへのパス。URL を入力するか、[Browse] をクリックしてローカルファイルを選択します。ここの例では、パスは
<DENODO_HOME>/samples/vdp/incidents/sales.wsdl
です。End Point: Web サービスにアクセスするための URL。たとえば、
http://localhost:8080/sales/services/RevenueProvider
とします。通常は WSDL にこの URL が記述されていますが、記述がないことや、記述されている URL が正しい場所を参照していないことがあります。From WSDL: エンドポイントの取得元である WSDL です。
From Variable: エンドポイントを 補間変数 から取得します。これは、このデータソースから作成する基本ビューには、[Variable] フィールドで指定した値を名前とする追加フィールドが存在することを意味します。これらのビューにクエリを実行する場合は、そのクエリの
WHERE
句で Web サービスのエンドポイントを指定します。以下に例を示します。SELECT * FROM v_revenue WHERE endpoint = 'http://acme:8080/sales/services/RevenueProvider'
エンドポイントが定期的に変化する場合や、実行時にエンドポイントを別のソースから取得する場合に、このオプションが効果的です。補間変数の詳細については、「 補間変数によるパスなどの値 」を参照してください。
Specify: エンドポイントの URL をすぐ下のボックスで指定します。WSDL にエンドポイントが記述されていない場合や記述されている URL が正しくない場合に便利です。たとえば、
localhost:8080
でコネクションをリッスンしていない Web コンテナに sales Web サービスをデプロイする場合です。
Authentication: Virtual DataPort は、認証が必要な Web サービスにアクセスできます。以下の 5 つの認証プロトコルがサポートされています。
HTTP Basic および HTTP Digest: 「 RFC 2617: HTTP Authentication: Basic and Digest Access Authentication 」に説明がある認証方法です。
HTTP NTLM: NTLM 認証プロトコル (NT LAN Manager (NTLM) 認証プロトコルの仕様 v1 および v2) を使用して、Microsoft Windows サーバーにアクセスします。Virtual DataPort は NTLM v1 と NTLM v2 をサポートしています。
HTTP SPNEGO (Kerberos): Kerberos チケットを使用して、Web サービスに送信する HTTP リクエストに署名します (「 Kerberos 認証による SOAP Web サービスへの接続 」を参照)。
WSS Basic および WSS Digest: Web Services Security (WS-Security) は、Web サービスを使用するアプリケーションにセキュリティ機能を実装する場合の標準です。現在、Denodo は、認証プロファイル「ユーザー名トークン」 (WSS - Web Services Security Username Token Profile 1.1) をサポートしています。
Web サービスの資格情報を提供するには、以下の 3 つの方法があります。
Specify: [Login] フィールドと [Password] フィールドに値を入力するほか、[HTTP NTLM] を選択している場合は [Domain] フィールドにも値を入力します。これらの資格情報を使用して、以下の目的で Web サービスサーバーに接続します。
このデータソースを使用するクエリを実行する。
Web サービスの WSDL を取得してその操作を表示する。
Pass-through session credentials: [Login] フィールドと [Password] フィールドに値を入力するほか、[HTTP NTLM] を選択している場合は [Domain] フィールドにも値を入力します。このデータソースを使用するクエリをクライアントが実行する際、Web サービスに接続して操作を実行するために使用する資格情報はユーザーの資格情報です。[Login] フィールドと [Password] フィールドの資格情報ではありません。
このオプションをチェックしている場合、[User] フィールドと [Password] フィールドの資格情報は、Web サービスの WSDL を取得してその操作を表示するために Web サービスサーバーに接続する目的でのみ使用されます。
このオプションを使用するデータソースを作成し、Virtual DataPort サーバーへの接続に使用した資格情報とは別の資格情報でそのデータソースのビューにクエリを実行する場合は、
USERNAME
とUSERPASSWORD
の各パラメータをクエリのCONTEXT
に追加します。この 2 つのパラメータは、[Pass-through session credentials] オプションをチェックして作成したデータソースでのみ考慮されます。たとえば、このオプションを有効にして Web サービスデータソースから作成した
view1
に以下を実行するとします。SELECT * FROM view1 CONTEXT(USERNAME = 'admin', PASSWORD = 'd4GvpKA5BiwoGUFrnH92DNq5TTNKWw58I86PVH2tQIs/q1RH9CkCoJj57NnQUlmvgvvVnBvlaH8NFSDM0x5fWCJiAvyia70oxiUWbToKkHl3ztgH1hZLcQiqkpXT/oYd' ENCRYPTED)
Virtual DataPort サーバーは、ユーザーが Virtual DataPort サーバーに接続するために使用した資格情報を無視して、ユーザー名「admin」、パスワード「password」を使用してリクエストをサービスに送信します。
トークン
ENCRYPTED
を追加して、暗号化したパスワードを入力することは必須です。パスワードを暗号化するには、ENCRYPT_PASSWORD
ステートメントを使用します。以下に例を示します。ENCRYPT_PASSWORD 'my_secret_password';
警告
パススルー資格情報が有効なデータソースを使用するビューに対してキャッシュを有効にする場合は注意が必要です。このような場合に発生することが考えられる問題については、付録「 データソースをパススルー資格情報を使用して構成する場合の検討事項 」を参照してください。
From variables: データソースを作成する際に資格情報を指定するのではなく、資格情報に 補間変数 (「 補間変数によるパスなどの値 」を参照) を割り当てておき、実行時に資格情報を指定する方法があります。そのためには、[Obtain credentials from variables] チェックボックスをチェックして、その下にある [Name variable] ボックスと [Test variable] ボックスに値を入力します。
たとえば、[HTTP Basic] 認証を選択して [Obtain credentials from variables] ボックスをチェックし、[Login] フィールドの [Name variable] に「user_name」、[Password] フィールドの [Name variable] に「password」と入力するとします。このデータソースから作成したビューには、2 つの追加フィールドとして [user_name] と [password] があります。このビューにクエリを実行するときに、クエリの WHERE 句でこれらの値を指定します。
SELECT * FROM average_monthly_array WHERE user_name = 'admin' and password = 'admin'[Test value] フィールドの値を使用して、サーバーから WSDL を取得します。
Proxy: Web サービスとのコネクションをプロキシ経由で確立する場合、以下の 3 つのオプションがあります。
[Manual] を選択して、プロキシサーバーのホスト名とポートを入力します。認証プロキシでは、ユーザー ID と有効なパスワードも指定する必要があります。
[Default] を選択します。Virtual DataPort サーバーは、そのデフォルトの HTTP プロキシ構成を使用します (「 HTTP プロキシのデフォルト構成 」を参照)。
[Automatic] を選択して、プロキシの構成パラメータが格納されている
proxy.pac
ファイルの URL を入力します。
Check certificates: 以下のどちらかのシナリオに該当する場合は、このチェックボックスをチェックします。
Web サービスが SSL/TLS (
https
で始まる URL) を使用していて、そのサービスが提示する証明書が、Denodo Platform に属する Java Virtual Machine (JVM) によって信頼されている証明機関 (CA) から発行されたものであることを Virtual DataPort で検証する場合。この検証は、このサービスとのコネクションを確立するたびに実行されます。このサービスが提示する証明書が信頼できる CA によって発行されたものではない場合、または自己署名された証明書ではあるものの、Virtual DataPort で検証を必要とする場合、JVM の信頼できる証明書のリストにその証明書をインポートします。その手順については、『インストールガイド』の「 Importing the Certificates of Data Sources (SSL Connections) 」を参照してください。
また、サービスが SSL クライアント認証を必要とする場合も、このチェックボックスをチェックします。
このチェックボックスのチェックをはずすと、以下の 2 つの影響があります。
Virtual DataPort では、サービスから提示された証明書を、その発行元を確認せずに受け入れます。
サービスが SSL クライアント認証を要求する場合、すべてのリクエストは失敗します。
Connection pool configuration: このダイアログでは、ターゲットホストに対して開くコネクションを構成し、そのコネクションを保存するプールを構成できます。
Web サービスデータソースは、コネクションプールを使用してデータを取得します。つまり、リクエストのたびに新しいコネクションを作成せずに既存のコネクションを再利用できるように、データソースごとに専用の HTTP コネクションのプールが用意されます。このデータソースの基本ビューを指定したクエリを実行すると、Virtual DataPort サーバーは、リクエストのたびに接続するのではなく、このプールにあるコネクションを再利用します。この方法の利点は、コネクションが確立済みなので、はるかに短時間で Virtual DataPort サーバーから応答が得られることにあります。
[Maximum number of connections] は、このデータソースのプールが保存できるコネクションの最大数です。
Virtual DataPort サーバーがリクエストを実行するときに、プールに空いているコネクションが存在しない場合は、プールに新しいコネクションが作成されます。プールにあるコネクションの数が [Maximum number of connections] に到達した状態で Virtual DataPort サーバーがさらにコネクションを必要とする場合、[Connection pool timeout (milliseconds)] に設定されているミリ秒数だけ Virtual DataPort サーバーが待機します。この時間が経過してタイムアウトすると、そのリクエストは失敗します。このタイムアウトの値に 0 を指定した場合、Virtual DataPort サーバーは新しいコネクションが得られるまで無期限に待機します。
データソースが「パススルーセッション資格情報」を使用している場合、Virtual DataPort サーバーは、各データソースのユーザー名ごとにコネクションプールを 1 つずつ作成します。
Read timeout (milliseconds): コネクションのタイムアウト。
プールからコネクションを取得した Virtual DataPort サーバーはターゲットホストに HTTP リクエストを送信します。このプロパティは、ソースからのデータの返信が始まるまでコネクションが待機する時間を制御します。これがタイムアウトに達すると、クエリは失敗します。
Web サービスデータソースを構成するダイアログの [Metadata] タブでは、データソースを保存するフォルダを設定して、そのデータソースの説明を指定できます。データソースを編集する際、 ボタンをクリックして、その所有者を変更することもできます。
Kerberos 認証による SOAP Web サービスへの接続¶
Kerberos 認証を使用して SOAP Web サービスに接続するには、[Authentication] ボックスで [HTTP SPNEGO (Kerberos)] オプションを選択します。
Virtual DataPort の正確な動作は、[Authentication] ボックスの下で選択する以下のオプションによって異なります。
From variables: チェックしている場合、このデータソースを指定したクエリを実行すると、Virtual DataPort では、ログイン変数とパスワード変数の値を使用してキー配布センター (KDC) に接続し、サービスチケットを取得します。このチケットを使用して、SOAP サービスに送信する HTTP リクエストに認証ヘッダーが追加されます。
[From variables] オプションの動作の詳細については、 前節 を参照してください。
Specify: チェックしている場合、このデータソースを指定したクエリを実行すると、Virtual DataPort では、[Login] ボックスと [Password] ボックスに入力された資格情報を使用して KDC に接続し、サービスチケットを取得します。このチケットを使用して、SOAP サービスに送信する HTTP リクエストに認証ヘッダーが追加されます。
Pass-through session credentials: チェックしている場合、クエリを実行するクライアントが Virtual DataPort への接続で使用する認証方法によって、次のように動作が異なります。
クライアントが Kerberos 認証を使用して Virtual DataPort に接続する場合、Virtual DataPort では、このクライアントがVirtual DataPort サーバーへのコネクションを開いたときに取得した TGT (ticket-granting ticket) を使用してサービスチケットを要求します。取得したサービスチケットを使用して、SOAP サービスに送信する HTTP リクエストに認証ヘッダーが追加されます。
クライアントが標準認証を使用して Virtual DataPort に接続する場合、Virtual DataPort では、クライアントのユーザーとパスワードを使用してサービスチケットを要求します。取得したサービスチケットを使用して、SOAP サービスに送信する HTTP リクエストに認証ヘッダーが追加されます。
これらのどのシナリオでも、Virtual DataPort サーバーで Kerberos 認証が有効になっていない場合は、以下の点を考慮します。
Virtual DataPort サーバーが Windows で動作していても、そのホストが Windows ドメインに属していない場合は、『インストールガイド』の「 Kerberos レルムに属することなく Kerberos 認証を有効化する 」の説明に従って、java.security.krb5.realm と java.security.krb5.kdc の 2 つのシステムプロパティを定義します。
Virtual DataPort サーバーが Linux で動作している場合は、システムに
krb5.ini
ファイルが必要です。このファイルがシステムに存在するかどうかを確認する手順の詳細については、『インストールガイド』の「 Kerberos 認証用の krb5 ファイルの提供 」を参照してください。
注釈
[Pass-through session credentials] オプションをチェックすることは、クエリを実行する際に Virtual DataPort が Web サービスにどのように接続するかという点にのみ影響します。Web サービスデータソースから基本ビューを作成するプロセスでは、WSDL を取得するリクエストが Virtual DataPort から送信されますが、その際はデータソースに設定されている資格情報が使用されます。この資格情報とは、[Pass-through session credentials] オプションと [Specify] オプションの場合は [Login] ボックスと [Password] ボックスの値であり、[From variables] オプションの場合は [Test value] ボックスの値です。
SOAP Web サービスからの基本ビューの作成¶
SOAP Web サービスデータソースを作成した後、この Web サービスの操作を呼び出すために、基本ビューを作成する必要があります。そのためには、[Server Explorer] でデータソースをダブルクリックして開き、[Create base view] をクリックします。WSDL ファイルに記述されている Web サービスとそのポート、操作、およびパラメータがツリー形式で表示されます (「 Operations and parameters of a Web Service 」を参照)。
操作から基本ビューを作成するには、操作の横にある [Create base view] をクリックします。ビューのスキーマがどのようになるかが表示されます (「 Creating the Web service base view average_monthly_sales 」を参照)。このダイアログでは以下の処理が可能です。
基本ビューの名前を変更する。
基本ビューのフィールドの名前と型を変更する。
ボタンをクリックして、フィールドの [Source type properties] を編集する。このダイアログでは、フィールドの正確な型を定義できるほか、その型によっては長さと小数点以下桁数も定義できます。
JDBC と ODBC の基本ビューの場合、これらのプロパティはデータベースから取得されるので、自動的に定義されます。Web サービスの基本ビューなど、他のタイプの基本ビューの場合は手動で定義する必要があります。
ビューのプライマリキー定義を変更する。JDBC 基本ビューを作成する場合、Virtual DataPort サーバーによって、データベースからプライマリキー定義が取得され、自動的にビューのプライマリキーが設定されます (アイコン が表示されているフィールド)。Web サービスの基本ビューなどの他のタイプのビューでは、適切なフィールドを選択して [Set selected as PK] をクリックすることによって、手動でプライマリキー定義を設定する必要があります。
ビューのプライマリキーの詳細については「 ビューのプライマリキー 」を参照してください。
[Metadata] タブで基本ビューの格納先フォルダを設定し、その説明を記述する。
基本ビューを編集する際、 ボタンをクリックすると、その所有者も変更できます。
操作を検索するには、ダイアログ上部にあるボックスに操作の名前または操作のいずれかのパラメータの名前を入力します。リストには、ここに入力したテキストを使用した名前のエレメントのみが表示されます。
次に、[Save] () をクリックして基本ビューを作成します。[Server Explorer] に新しい基本ビューが表示されます。
ここの例では、 sales
Web サービスの getAverageMonthlyRevenueBytaxId
操作から基本ビューを作成します。この操作では、顧客の平均月間売上高が返されます。基本ビューの名前を average_monthly_sales
、 in0
フィールドの名前を taxid
、 return
フィールドの名前を revenue
に、それぞれ変更します。
この新しい Web サービスの基本ビューを開いて、そのスキーマを表示するには、[Server Explorer] でそのビューをダブルクリックします (「 Schema of the base view average_monthly_sales 」を参照)。
複合値を返す Web サービス操作の処理¶
Web サービス操作の中には、エレメントの配列などの複合値を返すものがあります。このタイプの操作から基本ビューを作成するには、以下の 2 つの方法があります (「 Web service operation that returns an array 」を参照)。
Do not stream output: このオプションを使用すると、新しい基本ビューでは、複合型の array と register のフィールドで複合値が表現されます。この基本ビューからフラット化ビュー (「 フラット化ビューの作成 」を参照) を作成して、他のソースのデータと容易に組み合わせることができるように、これらの複合値を変換できます。
Stream output at specified level: このオプションを使用すると、SOAP 応答を処理する前に応答全体をメモリに収める必要がないように、Virtual DataPort サーバーによって SOAP 応答の処理が最適化されます。したがって、メモリ消費量が大幅に少なくなります。上記の [Do not stream output] オプションで基本ビューを作成すると、Web サービスから SOAP メッセージ全体が受信され、解析されるので、メッセージ全体をメモリに収める必要があります。
1 番目のオプションと比較した [Stream output at specified level] の欠点は、SOAP メッセージの各フィールドのうち、選択したレベル未満のものが無視されることです。例として、Web サービスの操作が次のような XML ドキュメントを返す場合を考えます。
<DataSampleResult_array>
<DATASAMPLE>
<INTSAMPLE>1</INTSAMPLE>
<ARRAYSAMPLE>
<ARRAYSAMPLE>
<r1>10</r1>
<r2>20</r2>
</ARRAYSAMPLE>
</ARRAYSAMPLE>
<TEXTSAMPLE>Sample text 1</TEXTSAMPLE>
</DATASAMPLE>
<DATASAMPLE>
<INTSAMPLE>2</INTSAMPLE>
<ARRAYSAMPLE>
<ARRAYSAMPLE>
<r1>30</r1>
<r2>40</r2>
</ARRAYSAMPLE>
<ARRAYSAMPLE>
<r1>50</r1>
<r2>60</r2>
</ARRAYSAMPLE>
</ARRAYSAMPLE>
<TEXTSAMPLE>Sample text 2</TEXTSAMPLE>
</DATASAMPLE>
<DATASAMPLE>
<INTSAMPLE>3</INTSAMPLE>
<ARRAYSAMPLE />
<TEXTSAMPLE>Sample text 3</TEXTSAMPLE>
</DATASAMPLE>
</DataSampleResult_array>
[Stream output at specified level] を選択して配列の ARRAYSAMPLE
レベルを指定すると、結果は以下のように変換されます。
INTSAMPLE |
r1 |
r2 |
---|---|---|
1 |
10 |
20 |
2 |
30 |
40 |
2 |
50 |
60 |
TEXTSAMPLE
エレメントが無視されていることに注意してください。また、3 番目の DATASAMPLE
エレメントは、その ARRAYSAMPLE
レベルが空であることから無視されています。
結論として、このオプションは効率の面で優れていますが、あらゆるシナリオに適しているわけではありません。
多様型または「any」型の Web サービス操作の処理¶
any
型または多様型の出力パラメータを持つ Web サービス操作は、他の Web サービス操作とは異なる方法で扱われます。基本ビューを作成するプロセスでは、Virtual DataPort サーバーでこの操作が呼び出され、応答から any
フィールドのデータ型が推測されます。この Web サービスに入力パラメータが存在する場合、ユーザーがその値を指定する必要があります。
[Create base view] ダイアログでは、このような操作に アイコンが表示されます。それらの操作の [Create base view] をクリックして表示されるダイアログでは、この操作を呼び出すための入力パラメータのサンプル値を入力する必要があります。その後は、Web サービスの基本ビューを作成するプロセスが、通常どおりに継続します。