WSDL
Web サービス記述言語 (WSDL) は、Extensible Markup Language (XML) ベースの記述言語です。この言語は、Web サービスを記述するための 業界標準として World Wide Web Consortium (W3C) に提出されました。 WSDL の機能は、2 つの主なアーキテクチャー原則から派生しています。 これらの原則とは、一連のビジネス・オペレーションを記述する機能と、 記述を 2 つの基本単位に分ける機能のことです。 これらの単位は、オペレーションの記述、 およびオペレーションとそれに関連した情報をパッケージする方法の詳細のことです。
WSDL 文書は、サービスをネットワーク・エンドポイントまたはポートの集合として定義します。 WSDL では、エンドポイント・メッセージの抽象定義は、その具体的なネットワーク・デプロイメントまたはデータ・フォーマット・バインディングから分離されます。 この分離により、抽象定義 (交換されたデータの抽象的記述であるメッセージと、 操作の抽象的コレクションであるポート・タイプ) の再使用がサポートされます。 特定の portType の具体的プロトコルとデータ・フォーマット仕様では、 再使用可能なバインディングが構成されます。 ポートは、再使用可能バインディングとともに、関連するネットワーク・アドレスにより定義され、 ポートの集合はサービスを定義します。 したがって、WSDL 文書はいくつかのエレメントで構成されます。
WSDL ファイル内の情報は次のような構造になっています。
- Web サービス・インターフェース定義
ここには、エレメントおよび名前空間が含まれます。
- Web サービス実装
ここには、サービスおよびポートの定義が含まれます。
WSDL ファイルは以下のエレメントで Web サービスを記述します。
portType
操作および関連メッセージの説明。portType エレメントは、 要約操作を定義します。
<portType name="EightBall">
<operation name="getAnswer">
<input message="ebs:IngetAnswerRequest"/>
<output message="ebs:OutgetAnswerResponse"/>
</operation>
</portType>
message
入出力パラメーターおよび戻り値の説明。
<message name="IngetAnswerRequest">
<part name="meth1_inType" type="ebs:questionType"/>
</message>
<message name="OutgetAnswerResponse">
<part name="meth1_outType" type="ebs:answerType"/>
</message>
types
メッセージ内で使用される XML 型を記述するためのスキーマ。
<types>
<xsd:schema targetNamespace="...">
<xsd:complexType name="questionType">
<xsd:element name="question" type="string"/>
</xsd:complexType>
<xsd:complexType name="answerType">
...
</types>
バインディング (binding)
バインディングは、portType と、 特定の portType エレメントにより定義されたメッセージ用データ・フォーマットにアクセスするために使用するプロトコルを記述します。
<binding name="EightBallBinding" type="ebs:EightBall">
<soap:binding style="rpc" transport="schemas.xmlsoap.org/soap/http">
<operation name="ebs:getAnswer">
<soap:operation soapAction="urn:EightBall"/>
<input>
<soap:body namespace="urn:EightBall" ... />
...
サービス
サービスおよびポートで、その Web サービスのロケーションが定義されます。
サービスには、Web サービス名とポート・リストが含まれます。ポート
ポートには、Web サービスのロケーションおよび、 サービスへのアクセスに使用されるバインディングが含まれます。<service name="EightBall">
<port binding="ebs:EightBallBinding" name="EightBallPort">
<soap:address location="localhost:8080/axis/EightBall"/>
</port>
</service>
Java™ API for XML Web Services (JAX-WS) または Java API for XML-based RPC (JAX-RPC) Web サービスを作成する場合、JavaBeans またはエンタープライズ Bean から開始するときにボトムアップ開発アプローチを使用することができ、また、既存の Web サービス記述言語 (WSDL) ファイルを使用して開始するときにトップダウン開発アプローチを使用することができます。
この製品について JAX-WS Web サービスを作成する場合、WSDL または実装 Bean クラスのいずれかから開始することができます。実装 Bean クラスから開始する場合は、wsgen コマンド行ツールを使用して、WSDL (要求があった場合) を含むすべての Web サービス・サーバー成果物を生成します。 WSDL から開始する場合は、wsimport コマンド行ツールを使用して、サーバー側またはクライアント側のすべての Web サービス成果物を生成します。
この製品向けの JAX-RPC Web サービスを作成する場合は、まずサービス・エンドポイント・インターフェースを含む実装 Bean がなければなりません。 次に、Java2WSDL コマンド行ツールを 使用して、Web サービスを定義する WSDL ファイルを作成します。 実装 Bean クラスを生成するために WSDL から開始する場合は、WSDL ファイルに対して WSDL2Java コマンド行ツールを実行し、Java API およびデプロイメント記述子テンプレートを作成します。
複数パーツ WSDL と WSDL パブリケーション
本製品は、複数パーツ Web サービス記述言語 (WSDL) ファイルを使用した Web サービスのデプロイメントをサポートしています。 複数パーツ WSDL ファイルでは、 実装 WSDL ファイルに wsdl:service が含まれています。この実装 WSDL ファイルは、 インターフェース WSDL ファイルをインポートしますが、このインターフェース WSDL ファイルには、また他の WSDL 構成体が含まれています。 これによって、同じ WSDL インターフェース定義を使用する複数の Web サービスがサポートされます。
<wsdl:import> エレメントは、別の WSDL ファイルへの参照を表します。 <wsdl:import> エレメントの location 属性に URL が含まれていない、すなわち、 先頭が http://、https://、または file:// ではないファイル名しか含まれていない場合は、 インポートするファイルが同じディレクトリーになければならず、相対パス・コンポーネントを含むことはできません。 例えば、META-INF/wsdl/A_Impl.wsdl がモジュール内にあり、インポート・ステートメント <wsdl:import="A.wsdl" namespace="..."/> を含んでいる場合、A.wsdl ファイルもモジュールの META-INF/wsdl ディレクトリーに配置されている必要があります。
WSDL ファイル内に相対インポートがある場合であっても、Enterprise JavaBeans (EJB) を使用している場合には META-INF/wsdl ディレクトリーに、 JavaBeans コンポーネントを使用している場合には WEB-INF/wsdl ディレクトリーに、 すべての WSDL ファイルを置くことをお勧めします。さもないと、 <location="../interfaces/A_Interface.wsdl"namespace="..."/> のようなパスを使用するときに、 WSDL の資料に影響が出ます。 この例のようなパスを使用すると、ファイルがそのパスに置かれているかどうかにかかわらず、 相対パスが存在していることが原因で障害が発生します。 ロケーションが Web アドレスの場合は、 デプロイメント時とサーバー始動時の両方で読み取り可能でなければなりません。
META-INF/wsdl または WEB-INF/wsdl ディレクトリーに入っているファイルは、 URL アドレスまたはファイル (WSDL ファイルや XML スキーマ定義 (XSD) ファイルなど) を通じて公開できます。 例えば、webservices.xml デプロイメント記述子の <wsdl-file> エレメントで参照されるファイルが、 META-INF/wsdl または WEB-INF/wsdl ディレクトリーに入っている場合、 そのファイルは公開できます。 また、<wsdl-file> によってインポートされるファイルが wsdl/ ディレクトリーかそのサブディレクトリーに入っている場合、 それらのファイルは公開できます。
<wsdl-file> エレメントによって参照される WSDL ファイ ルが wsdl ディレクトリーおよびそのサブディレクトリー以外のディレ クトリーに入っている場合、そのファイルと、同じディレクトリー内のインポ ート済みファイル (WSDL ファイルまたは XSD ファイル) は、 アプリケーションのインストール時に変更なしで wsdl ディレクトリーにコピーされます。 これらのタイプのファイルも公開可能です。
<wsdl-file> が別のディレクトリー (-INF/wsdl でも、 そのサブディレクトリーでもないディレクトリー) にあるファイルをインポートすると、 そのファイルは wsdl ディレクトリーにコピーされず、公開できません。
JAX-WS Web サービスの場合、アノテーションを使用して、WSDL のロケーションを指定できます。 WSDLLocation 属性が指定された @WebService アノテーションを使用してください。WSDLLocation 属性はオプションです。 この属性が指定されていない場合、Web サービス・クラスにある情報から WSDL が生成され、公開されます。オプションで、webservices.xml デプロイメント記述子に WSDL ファイルのロケーションを指定することができます。ただし、webservices.xml デプロイメント記述子に定義する情報によって、アノテーションに指定された対応する情報がすべてオーバーライドされます。