[WSDL のインポート]ウィザード
[コンポーネント]メニュー:インデックス への移動
[コンポーネント|WSDL のインポート...]
[ファイル|新規作成|その他...|Delphi プロジェクトまたは C++Builder プロジェクト|Web サービス|WSDL インポータ]
メモ:[ファイル|新規作成|その他...]から WSDL インポータを呼び出す場合には、あらかじめアプリケーションを作成しておかなければコマンドを起動できませんが、[コンポーネント]メニューを使用した場合には、アプリケーションを作成していなくてもウィザードを起動できます。
このウィザードを使用すると、Web サービスについて記述した WSDL ドキュメントまたは XML スキーマをインポートできます。 WSDL ドキュメントまたは XML スキーマをインポートすると、リモート インターフェイス オブジェクト(THTTPRIO)を使って Web サービスを呼び出すために必要なすべてのインターフェイスとクラスの定義が、ウィザードによって生成されます。 Web サービス アプリケーションを作成するためのスケルトン コードをウィザードに生成させることもできます(たとえば、WSDL ドキュメントに既に定義されている Web サービスを実装する場合など)。
目次
[言語]ページ
プロジェクトを開いていない状態でこのウィザードを起動すると、初期ページ([言語]ページ)が表示されます。 このページでは、以下のバインディングを生成するかどうかを指定します。
- Delphi
- C/C++
[WSDL の場所]ページ
インポートする WSDL ドキュメントの URL を指定(または、保存済みの URL から選択)して、そのドキュメントにアクセスするのに使用する認証([ユーザー名]、[パスワード]、[プロキシ])を設定できます。
項目 | 説明 |
---|---|
[WSDL ファイルの位置または URL] |
WSDL ファイル名、またはドキュメントが公開されている URL を入力します。 編集ボックスの横にある参照([...])ボタンをクリックすると、ファイルの場所を探すことができます。 ファイル名を入力後、[SOAP バージョン]ページに移動するには[次へ]ボタンをクリックします。 |
[ユーザー名] |
WSDL ドキュメントが認証を必要とするセキュア サーバー上にある場合に、使用するユーザー名を指定します。 |
[パスワード] |
WSDL ドキュメントが認証を必要とするセキュア サーバー上にある場合に、[ユーザー名]と共に使用するパスワードを指定します。 |
[プロキシ] |
[Web サービス インポート]ダイアログの[WSDS ソース]セクションで指定した URL に、リクエストを転送しなければならない、すべてのプロキシ サーバーのホスト名を指定します。 |
[SOAP バージョン]ページ
WSDL ドキュメントで使われている SOAP バージョン(1.1 または 1.2)を指定するか、利用可能な最新バージョンを自動選択させるためのページです。 1 つのサービスが 1.1 と 1.2 の両方をサポートしている場合があります。 バージョンの不一致が起きないよう(不一致の場合、不正確なソース コードが生成される可能性があります)、通常は[SOAP バージョンの自動選択 (推奨)]を選択してください。
次のいずれかのオプションを選択します。
項目 | 説明 |
---|---|
[SOAP バージョンの自動選択 (推奨)] |
インポート対象の WSDL で記述されている SOAP サービスがどの SOAP バージョンをサポートしているかに応じて、SOAP サービスが選択されます。 1.1 と 1.2 の両方のバージョンが使用可能な場合には、SOAP 1.2 が優先されます。 この表の後にある例を参照してください。 |
[SOAP 1.1 プロトコルの WSDL バインディング拡張機能のみ処理] |
プロセスは、SOAP 1.1 プロトコルだけを使用してサービスと通信します。 |
[SOAP 1.2 プロトコルの WSDL バインディング拡張機能のみ処理] |
プロセスは、SOAP 1.2 プロトコルだけを使用してサービスと通信します。 |
たとえば、定義された各サービスが次の SOAP バージョンをサポートしていると WSDL に記述されているとします。
- CreditCardIssueService SOAP 1.1
- CreditCardVerifyService SOAP 1.1、1.2
- CreditCardRevokeService SOAP 1.2
[SOAP バージョン]ページで[SOAP バージョンの自動選択 (推奨)]を選択すると、以下のサービスがインポートされます。
- CreditCardIssueService SOAP 1.1
- CreditCardVerifyService SOAP 1.2
- CreditCardRevokeService SOAP 1.2
つまり、CreditCardVerifyService の SOAP 1.1 バージョンはインポートされません。
[SOAP 1.1 プロトコルの WSDL バインディング拡張機能のみ処理]を選択すると、以下のサービスがインポートされます。
- CreditCardIssueService SOAP 1.1
- CreditCardVerifyService SOAP 1.1
つまり、CreditCardRevokeService は SOAP 1.2 しかサポートしていないため、除外されます。
[SOAP 1.2 プロトコルの WSDL バインディング拡張機能のみ処理]を選択すると、以下のサービスがインポートされます。
- CreditCardVerifyService SOAP 1.2
- CreditCardRevokeService SOAP 1.2
つまり、CreditCardIssueService は SOAP 1.1 しかサポートしていないため、除外されます。
[次へ >>]をクリックして、[WSDL インポート オプション]ページに進みます。
[WSDL インポート オプション]ページ
このウィザード ページを使用すると、ウィザードが WSDL ドキュメントの定義を表すコードを生成する方法を構成できます。 以下で説明するオプションを選択します。 通常は、デフォルトのオプションを使用してください。これらのデフォルト値が、WSDL ドキュメントをインポートする最も安全な方法だからです。
項目 | 説明 |
---|---|
[タイプとインターフェイスの詳細情報を生成する] |
このオプションをオンにすると、型の名前空間、サービスの形式、バインディング名など、WSDL のその他の公開データに関する情報が生成されます。 |
[単独の out パラメータを戻り値と見なす] |
オンにすると、単独の出力メッセージを持つ操作が、出力メッセージを戻り値とする関数にマップされます。 オフにすると、出力メッセージは出力パラメータにマップされます。 |
[クライアント プロキシではなくサーバー実装を生成する] |
オンにすると、インポートしたインターフェイスの実装クラスが生成されます。 WSDL ドキュメントに既に定義されている Web サービスを実装するサーバーを記述する場合に、このオプションを使用します。 |
[リテラル パラメータをアンラップする] |
ドキュメント/リテラル エンコーディングでは、Web サービスで操作を記述しません。 その代わりに、期待される入力を表すレコードと、出力を表すレコードを記述します。 [リテラルパラメータを分割する]をオンにすると、これら 2 つのレコードそれぞれがメソッド呼び出しに変換されます。 |
[リテラルの型を生成する] |
ドキュメント/リテラル エンコーディングでは、Web サービスで操作を記述しません。 その代わりに、期待される入力を表すレコードと、出力を表すレコードを記述します。 [リテラルに対する型を生成する]をオンにすると、これら 2 つのレコードがメソッド呼び出しに変換された場合でも([リテラルパラメータを分割する]がオンの場合でも)、これらのレコードの型定義が生成されます。 |
[文字列を WideString 型にマップする] |
オンにすると、すべての文字列型が WideString 値にマップされます。 オフにすると、代わりに string 型が使用されます。 WideString 値は、拡張文字を使用する値を扱うときに、必要になる可能性があります。 文字列値で拡張文字を使用しない場合は、string 型を使用する方が効率的です。 |
[リモート可能型のデストラクタを生成する] |
オンにすると、型を表すクラスにデストラクタが生成されます。 このデストラクタは、型がクラスまたはクラスの配列である、すべてのネストしたメンバを解放します。 この生成されたデストラクタにより、型を表すクラスのインスタンスを解放するために必要な作業が単純化されます。これは、クラスを使用してリモート可能型を表しているクラス メンバを明示的に解放する必要がなくなるためです。 |
[警告をコメントとして挿入する] |
オンにすると、生成されるファイルの先頭に挿入されるコメントに、警告メッセージが追加されます。 これらの警告は、[スキーマエラーを無視する]をオンにしているときに WSDL ドキュメントに無効な型定義があるなどの問題、[リテラルパラメータを分割する]をオンにしているときにリテラル パラメータを分割しようとして発生する問題などを説明します。 |
[純粋なコレクションをラッパー クラス型にマップする] |
このオプションをオンにすると、インポートした配列型をラッパー クラスにマップできるようになります。 このオプションは主に C++Builder のために用意されています。C++Builder では、配列型を直接 WSDL の配列型にマップできないので、ラッパー コレクション クラスが必要だからです。 |
[使用されていないタイプを出さない] |
このオプションをオンにすると、WSDL ドキュメントに宣言されていても、どの公開サービスでも使用されない型のコードは生成されません。 クラスにはこのルールが適用されないことに注意してください。基底クラスを必要とする派生クラスのインスタンスを、サービスが返す可能性があるからです。 この場合、基底クラスのコードと派生クラスのコードの両方が生成されます。 |
[列挙型メンバを検証する] |
このオプションをオンにすると、列挙メンバを生成するときに、必ずグローバル シンボルのリストが使用されます。 これにより、WSDL ドキュメントに宣言されている列挙型の列挙メンバ間の名前の衝突を回避できます。 Delphi 2009 以降では、このオプションをオンにすることを推奨します。 |
[Fault タイプをインポートする] |
このオプションをオンにすると、障害と判定されたタイプが処理されます。 |
[ヘッダー タイプをインポートする] |
オンにすると、ヘッダーと判定されたタイプを処理できます。 |
[COM API を使ってインターフェイス GUID を生成する] |
オンにすると、サービスをインポートするたびに、一意の GUID を割り当てられます。 このオプションをオフにすると、サービスのコードを何度生成しても、そのサービスに対して生成された GUID は変わらずに保持されます。 ほとんどの場合では、このオプションをオフにすることを推奨します。 |
[インクルードおよびインポートされたスキーマを処理する] |
このオプションをオンにすると、インクルードおよびインポートされたスキーマが処理されます。 |
[クラス エイリアスをクラス型として生成する] |
このオプションをオンにすると、弱いエイリアスの代わりにクラス型が生成されます。 このオプションによって、生成されるエイリアス クラスは、基底型とは異なる RTTI(Run Time Type Information:実行時型情報)を持ちます。 |
[out パラメータを許可する] |
このオプションでは、SOAP メッセージのマルチパート部を返すときに、out パラメータを使用するメソッドを生成するかどうかを制御します。 このオプションをオフにすると、out パラメータは生成されず、マルチパートのSOAP メッセージのためのラッパー クラスが生成されます。 |
[プロパティの設定アクセサ メソッドと取得アクセサ メソッドを使用する] |
デフォルトでは、生成されたクラスのフィールドに直接対応するプロパティが生成されます。 このオプションをオンにすると、プロパティではなく設定アクセサ メソッドと取得アクセサ メソッドを強制的に生成させることができます。 |
[オプションの Nillable 要素を処理する] |
このオプションをオンにすると、オプションの nil 値になり得るプロパティに関する情報が生成されます。 この情報を基に、SOAP ランタイムは特定のプロパティを nil 値にできるようにします。 |
[nil 値を取り得る単純型には TXSString を使用する] |
WSDL 標準では、単純な型を nil 値(Delphi では nil、C++ では NULL)にすることを許可していますが、Delphi や C++ ではこれが許可されていません。 このオプションをオンにすると、ラッパー クラスのインスタンスを使用することで、この制約を回避できます。 |
[スコープの設定された列挙型を生成する] |
オンにすると、スコープのある列挙型が生成されます。 同じ名前で異なる値を定義している複数の列挙型が WSDL ドキュメントに含まれる場合に、このオプションをオンにします。 |
[WSDL インポート オプション]ページで[完了]をクリックして、ソース コードの生成に進みます。
エラー メッセージ
[WSDL のインポート]ウィザードでは、以下のエラー メッセージが生成される可能性があります。
- WSDL ファイル/ロケーションをロードできません: <不正な URL>. エラー [ドキュメントが空です]
- 通常、このエラー メッセージは、URL が無効であることを示します。 つまり、コンテンツを返さない URL です。
- WSDL ファイル/ロケーションをロードできません: <URL>. エラー [この場所ではホワイトスペースを使用できません]
- このエラーは、URL が HTML またはテキストのコンテンツを返した(つまり、URL から XML コンテンツが返されなかった)ことを示します。
- WSDL ファイル/ロケーションをロードできません: <URL>. エラー [終了タグ 'ul' がタグ 'p' の開始と一致しません]
- このエラーも、URL が HTML コンテンツを返したことを示します。 このメッセージは、一部の Web サービスで一般的に使われる '?wsdl' の問い合わせ文字列を指定し忘れたときによく出力されます。 たとえば、.NET Web サービス用に http://<ドメイン>.com/service.asmx?wsdl ではなく http://<ドメイン>.com/service.asmx を使用した場合などです。
- *エラー*: '<URL>' - 名前空間 "http://schemas.xmlsoap.org/wsdl/" の <definition> ノードが見つかりません
- このエラーは、URL から XML コンテンツが返されたものの、WSDL ファイルに入っているはずのルートの <definition> 要素がその中に含まれていないことを示します。 これは、WSDL ドキュメント自体ではなく、WSDL が使用するスキーマをインポートした場合などに発生します。
トラブルシューティング
URL のトラブルシューティングを行うには、ブラウザで WSDL の URL を表示してみる方法が簡単です。 HTML ページが表示されれば、その URL は適切ではありません。 WSDL ドキュメントに XML が表示されなければなりません。