WebServiceにおけるWSDLの詳細説明

WebService における WSDL の詳細な説明
誰かが WebService を開発するとき、特にサードパーティとのインターフェースがある場合、SOAP プロトコルを使用します。その後、ユーザー (またはバックグラウンド) が WSDL ファイル (または URL) を渡し、それに応じて適応するように指示します。この際、WebServiceのWSDLについてある程度の理解が必要となりますので、本記事ではWSDL(WebService description Language)について詳しくまとめていきます。
WSDL (Web サービス記述言語、Web サービス記述言語) は、Web サービス記述を、クライアントがドキュメント指向の情報またはプロセス指向の呼び出しを含むサービスにアクセスできるサービス アクセス ポイントのセットとして定義する XML アプリケーションです。リモート プロシージャ コール)。WSDL は、まずアクセス操作とアクセス中に使用される要求/応答メッセージを抽象化し、次にそれを特定のトランスポート プロトコルとメッセージ形式にバインドして、最終的に展開される特定のサービス アクセス ポイントを定義します。関連する特定のデプロイされたサービス アクセス ポイントは、組み合わせることにより抽象的な Web サービスになります。

一。WSDL の基本概念
WSDL は Web サービスを正確に記述するために使用されるドキュメントであり、WSDL ドキュメントは WSDL-XML スキーマに従った XML ドキュメントです。WSDL ドキュメントは、Web サービスをサービス アクセス ポイントまたはポートのコレクションとして定義します。WSDL では、サービス アクセス ポイントとメッセージの抽象定義は、具体的なサービス デプロイメントやデータ フォーマット バインディングから分離されているため、再利用できます。メッセージは交換されるデータの抽象的な記述を指し、ポート タイプは操作の抽象的な集合を指します。特定のポート タイプの具体的なプロトコルとデータ形式の仕様は、再利用可能なバインディングを構成します。ポートは、Web アクセス アドレスを再利用可能なバインディングに関連付けることによって定義され、ポートのコレクションがサービスとして定義されます。
WSDL ドキュメントには通常、8 つの重要な要素、つまり定義、タイプ、インポート、メッセージ、portType、オペレーション、バインディング、およびサービス要素が含まれています。これらの要素は、WSDL ドキュメントのルート要素である定義要素内にネストされています。
WSDLドキュメントの外部構造図:

WSDL サービスが対話する基本要素は次のとおりです。
タイプ (メッセージ タイプ): ある種のタイプ システム (XSD など) を使用した、データ型定義のコンテナー。
メッセージ (メッセージ): 1 つ以上の部分で構成される、通信データの抽象型定義。
部分: メッセージ パラメーター
PortType (ポート タイプ): 特定のポート タイプの特定のプロトコルとデータ形式の仕様。、1 つ以上のオペレーションで構成されます。
操作: サービスによってサポートされる操作の抽象的な説明。WSDL は 4 つの操作を定義します:
1. 一方向: エンドポイントが情報を受信する;
3. 要求-応答: エンドポイントがメッセージを送信し、関連するメッセージを受け入れる;
4. 通知(notification[2]): エンドポイントがメッセージを送信します。

バインディング: 特定のポート タイプに対する特定のプロトコルとデータ形式の仕様。
ポート: バインディングとネットワーク アドレスの組み合わせとして定義される単一のエンドポイント。
サービス: 関連するポートのコレクション (関連するインターフェイス、操作、メッセージなどを含む)。
外部構造内に複数の層が存在する場合もあります。

二。WSDL の基本構造の詳細な説明
以下では、wsdl ドキュメントを使用して、WSDL の構造を詳細に説明します。

<?xml バージョン="1.0" エンコーディング="UTF-8" ?>

<wsdl:settings
targetNamespace=“http://com.liuxiang.xfireDemo/HelloService”
xmlns:tns=“http://com.liuxiang.xfireDemo/HelloService”
xmlns:wsdlsoap=“http://schemas.xmlsoap.org” /wsdl/soap/”
xmlns:soap12=”http://www.w3.org/2003/05/soap-envelope”
xmlns:xsd=”http://www.w3.org/2001/XMLSchema”
xmlns: soapenc11=“http://schemas.xmlsoap.org/soap/encoding/”
xmlns:soapenc12=“http://www.w3.org/2003/05/soap-encoding”
xmlns:soap11=“http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsdl=”http://schemas.xmlsoap.org/wsdl/”>
wsdl:types
<xsd:schema xmlns:xsd=”http://www.w3. org/2001/XMLSchema”
attributeFormDefault=”修飾された” elementFormDefault=”修飾された”
targetNamespace=”http://com.liuxiang.xfireDemo/HelloService”>
<xsd:element name=”sayHello”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=”1” minOccurs=”1”
name=”name ” nillable=”true” type=”xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”sayHelloResponse”>
xsd:complexType
xsd:sequence
< xsd:element maxOccurs=“1” minOccurs=“0”
name=“return” nillable=“true” type=“xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name=“sayHelloResponse”>
<wsdl:part name=”parameters” element=”tns:sayHelloResponse” />
</wsdl:message>
<wsdl:message name=”sayHelloRequest”>
<wsdl:part name=”parameters” element=”tns:sayHello” />
</wsdl:message>
<wsdl:portType name=”HelloServicePortType”>
<wsdl:operation name=”sayHello”>
<wsdl:input name=”sayHelloRequest”
message=”tns:sayHelloRequest” />
<wsdl:output name=”sayHelloResponse”
message=”tns:sayHelloResponse” />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name=”HelloServiceHttpBinding”
type=”tns:HelloServicePortType”>
<wsdlsoap:binding style=” document”
Transport=”http://schemas.xmlsoap.org/soap/http” />
<wsdl:operation name=”sayHello”>
<wsdlsoap:operationsoapAction=”” />
<wsdl:input name=”sayHelloRequest”>
<wsdlsoap:body use=”literal” />
</wsdl:input>
<wsdl:出力名=”sayHelloResponse”>
<wsdlsoap:body use=”literal” />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name=”HelloService”>
<wsdl:port name=“HelloServiceHttpPort”
binding=“tns:HelloServiceHttpBinding”>
<wsdlsoap:address
location=“http://localhost:8080/xfire/services/HelloService” />
</wsdl:port>
</wsdl:service>
</ wsdl:定義>
1
2
3
4
5
6
7
8
9
10
11
12
13
14 15 16 17
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60













































61
62
63
64
65
66
67
68
69
(1) 定義要素
すべての WSDL 文書のルート要素は、定義要素です。この要素はドキュメント全体をカプセル化し、その名前で WSDL ドキュメントを提供します。この要素は名前空間 (targetNamespace) を提供する以外に他の機能を持たないため、詳細な説明は省略します。

(2) タイプ要素
WSDL は、基本的な型システムとして W3C XML スキーマの組み込みタイプを採用します。types 要素は、XML スキーマの組み込み型に記述されていないさまざまなデータ型を定義するためのコンテナとして使用されます (明確ではありません: XML スキーマの組み込み型に記述されていないさまざまなデータ型)。 。メッセージ部分の可用性を宣言する場合、メッセージ定義では、types 要素で定義されたデータ型と要素が使用されます。この記事の WSDL ドキュメント内の型定義は次のとおりです。

wsdl:types
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
attributeFormDefault=“qualified” elementFormDefault=“qualified”
targetNamespace=“http://com.liuxiang.xfireDemo/HelloService” ">
<xsd:element name=“sayHello”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=“1” minOccurs=“1”
name=“name” nillable=“true” type=“xsd:string” / >
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=“sayHelloResponse”>
xsd:complexType
xsd:sequence
<xsd:element maxOccurs=“1” minOccurs=“0”
名前=”return” nillable=”true” type=”xsd:string” />
</xsd:sequence>
</xsd:複合タイプ>
< / xsd:element>
</xsd:schema>
</wsdl:types>
1
2
3
4
5
6
7
8
9 10 11 12 13 14
15 16 17 18 19 20 21 22上記はデータ定義部分であり、以下を定義します2 つの要素、1 つはsayHello、もう 1 つはsayHelloResponse: SayHello: 複合タイプを定義し、将来操作の入力部分を記述するために使用される単純な文字列のみを含みます。sayHelloResponse:複合タイプを定義し、のみを含みます。 a 将来の操作の戻り値を記述するために使用される単純な文字列。ここで、sayHelloResponse は SayHello に関連し、sayHello はメソッドに関連し、内部: type="xsd:string"、name="name" は次のとおりです。受信名を決定する パラメータは String 型であり、sayHelloResponse の name="return" type="xsd:string" は、sayHello (String name) メソッドによって返される型が String 型であることを決定します。















(3) import 要素 import
要素により、他の WSDL 文書で指定された名前空間の定義要素を、現在の WSDL 文書内で使用できるようになります。この例では import 要素は使用されません。この機能は、ユーザーが WSDL ドキュメントをモジュール化したい場合に便利です。
インポートの形式は次のとおりです。

<wsdl:import namespace="http://xxx.xxx.xxx/xxx/xxx" location="http://xxx.xxx.xxx/xxx/xxx.wsdl"/>
1
には namespace 属性と location 属性が必要です:
1.namespace 属性: 値は、インポートされる WSDL ドキュメントで宣言されている targetNamespace と一致する必要があります;
2.location 属性: 実際の WSDL ドキュメントを指す必要があり、ドキュメントを空にすることはできません。

(4) message 要素
message 要素には、Web サービスが使用するメッセージのペイロードが記述されます。message 要素は、出力または受信したメッセージのペイロードを記述することができ、SOAP ファイル ヘッダーの内容とエラー詳細要素を記述することもできます。メッセージ要素の定義方法は、RPC スタイルのメッセージングが使用されるか、ドキュメント スタイルのメッセージングが使用されるかによって異なります。このドキュメントの message 要素の定義では、このドキュメントではドキュメント スタイルのメッセージングが使用されます。

<wsdl:message name="sayHelloResponse">
<wsdl:part name="parameters" element="tns:sayHelloResponse" /> </
wsdl:message>
<wsdl:message name="sayHelloRequest">
<wsdl:part name= "parameters" element="tns:sayHello" />
</wsdl:message>
1
2
3
4
5
6
この部分はメッセージ形式の抽象的な定義です。sayHelloResponse とsayHelloRequest の 2 つのメッセージが定義されています。

1.sayHelloRequest:
sayHello オペレーションのリクエスト メッセージ形式は、メッセージ フラグメント、名前付きパラメータで構成され、要素は前に定義したタイプの要素です。

2.sayHelloResponse:
sayHello オペレーションの応答メッセージ形式は、parameters という名前のメッセージ フラグメントで構成され、要素は前に定義したタイプの要素です。RPC スタイルのメッセージングが使用されている場合、ドキュメント内の
element 要素のみが必要です。 (??) と入力するように変更してください。

(5) portType 要素
portType 要素は、Web サービスの抽象インタフェースを定義します。このインターフェイスは Java インターフェイスに似ており、実装を定義せずに抽象型とメソッドを定義します。WSDL では、portType 要素は binding 要素と service 要素によって実装されます。これらの要素は、Web サービス実装で使用されるインターネット プロトコル、エンコード スキーム、およびインターネット アドレスを記述するために使用されます。
portType には複数の操作を定義でき、操作はメソッドとみなすことができます。この記事での WSDL ドキュメントの定義は次のとおりです。

<wsdl:portType name="HelloServicePortType">
<wsdl:operation name="sayHello">
<wsdl:input name="sayHelloRequest"
message="tns:sayHelloRequest" />
<wsdl:output name="sayHelloResponse"
message=" tns:sayHelloResponse” />
</wsdl:operation>
</wsdl:portType>
1
2
3
4
5
6
7
8
portType はサービス コール モードのタイプを定義します。これには操作の SayHello メソッドが含まれ、サービス コール モードを示す入力と出力が含まれます。オペレーションはリクエスト/レスポンス パターンであり、リクエスト メッセージは前に定義したsayHelloRequest、レスポンス メッセージは前に定義したsayHelloResponseです。入力は Web サービスに渡されるペイロードを表し、出力メッセージはクライアントに渡されるペイロードを表します。
これは抽象クラスに抽象メソッドsayHelloを定義することに相当し、メソッドのパラメータと戻り値の定義をtypeに、メソッド名をmessageに定義します。

(6) binding binding
要素は、抽象的な portType を具体的なプロトコル (SOAO および HTTP)、メッセージング スタイル、およびエンコード スタイルのセットにマップします。通常、バインディング要素はプロトコル固有の要素と一緒に使用されます。この記事では例を示します。

<wsdl:binding name=”HelloServiceHttpBinding”
type=”tns:HelloServicePortType”>
<wsdlsoap:binding style=”document”
Transport=”http://schemas.xmlsoap.org/soap/http” />
<wsdl:操作名=”sayHello”>
<wsdlsoap:operationsoapAction=”” />
<wsdl:input name=”sayHelloRequest”>
<wsdlsoap:body use=”literal” />
</wsdl:input>
<wsdl:output name=”sayHelloResponse” ">
<wsdlsoap:body use=“literal” />
</wsdl:output>
</wsdl:operation>
</wsdl:バインディング>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
この部分では、サービス アクセス ポイントの抽象定義を SOAP および HTTP とバインドし、SOAP/HTTP を介して上記のアクセス エントリ ポイント タイプに従ってデプロイされたアクセス エントリにアクセスする方法を説明します。
特定の SOAP 呼び出しでは、使用する必要があるsoapAction が "xxx" であることが規定されており、このアクションは WebService コード呼び出しにおいて非常に重要です。特定の使用法では、特定のプロトコルで定義された要素を参照する必要があります。

(7) service 要素と port 要素
service 要素には 1 つ以上の port 要素が含まれており、各 port 要素は異なる Web サービスを表します。port 要素は URL を特定のバインディングに割り当てます。また、2 つ以上の port 要素が同じバインディングに異なる URL を割り当てることも可能です。ドキュメントの例:

<wsdl:service name="HelloService">
    <wsdl:port name="HelloServiceHttpPort"
        binding="tns:HelloServiceHttpBinding">
        <wsdlsoap:address
            location="http://localhost:8080/xfire/services/HelloService" />
    </wsdl:port>
</wsdl:service>

1
2
3
4
5
6
7
この WSDL ドキュメントを学習するにあたり、初めて見たときは非常に奇妙に感じましたが、多くの要素が含まれています。学習するには、まず外部構造の意味と機能を理解する必要があります。意味と機能、一部の要素はほとんど影響を与えず、一部の要素は非常に関連しており、一部の要素はより重要です。
WSDL図:

—————————————————
著作権表示: この記事は CSDN ブロガー「Zheng Rong life」のオリジナル記事であり、CC 4.0 BY-SA 著作権契約に従い、オリジナルの情報源を添付してくださいリンクとこの声明。
元のリンク: https://blog.csdn.net/wenzhi20102321/article/details/68486526

おすすめ

転載: blog.csdn.net/weixin_44659084/article/details/130217332
おすすめ