高度なカスタマイズ > Info*Engine ユーザーガイド > SOAP サービス
  
SOAP サービス
SOAP (Simple Object Access Protocol) は、情報のやり取りや、分散環境でリモートプロシージャ呼び出しを実行するための、簡易版プロトコルです。
SOAP の一般情報については、以下のリンクを参照してください。
http://www.w3.org/TR/SOAP
次のトピックでは、レガシー SOAP サービスについて説明し、SOAP でタスクを記述するための情報を紹介します。また、SOAP リクエストが Info*Engine Java Platform, Enterprise Edition (Java EE) コネクタ内でどのように機能するかについても説明します。Java SOAP クライアントの記述方法を段階的に説明する例も示します。
レガシー サービス
Windchill を実行しているときは、RPC サーブレットではなく SimpleTaskDispatcher サーブレットを使用することをお勧めします。外部から見ると 2 つのサーブレットの動作は同じですが、Windchill がインストールされている場合、SimpleTaskDispatcher はメソッドサーバーで稼働中の SimpleTaskDispatcher サービスに直接処理を依頼します。その結果、このサーブレットはスタンドアロンの Info*Engine RPC サーブレットよりも効率よく動作します。
以下のトピックで、RPC サーブレットのアドレスが記載されているところでは、その URL 内の RPC を SimpleTaskDispatcher に置き換えてください。
例:
http://<ホスト>/Windchill/servlet/RPC
これは以下のように変更します。
http://<ホスト>/Windchill/servletSimpleTaskDispatcher
* 
サイトでフォームベース認証が使用されている場合、RPC または SimpleTaskDispatcher サーブレットへのアクセスを試みるプログラム的クライアントは、/protocolAuth URL プリフィックスを使用する必要があります。例:
http://<ホスト>/Windchill/protocolAuth/servlet/SimpleTaskDispatcher
または
http://<ホスト>/Windchill/protocolAuth/servlet/RPC
フォームベース認証の詳細については、認証を参照してください。
SOAP RPC サーブレット
Info*Engine では、SOAP クライアントから SOAP リクエストを受信し、レスポンスをクライアントに返す SOAP Remote Procedure Call (RPC) サーブレットを提供しています。このサーブレットは、クライアントから送信された情報 (実行するメソッドや、その他の要求情報で構成されます) を収集し、サイトのユーザーが SOAP クライアントと併用するために作成したタスクを実行することにより、メソッドを処理します。これらのタスクを使用して Task Webject を実行します。サーブレットを使用することで、SOAP クライアントはこれらの特別に記述された Info*Engine ビジネスタスクを呼び出すことができます。必要な SOAP タスクフォーマットの詳細については、SOAP で使用するタスクの記述を参照してください。
Info*Engine SOAP RPC サーブレットを使用すると、Info*Engine Java EE コネクタ、またはその他のサードパーティ製 SOAP クライアントを使用して開発された SOAP クライアントとの間でデータを送受信できます。詳細については、Info*Engine J2EE コネクタを参照してください。
SOAP RPC サーブレットは、HTTP GET リクエスト (たとえば、標準のウェブブラウザを使用して直接サーブレットにアクセスする場合) を受信すると、その SOAP サービス用の Web Services Definition Language (WSDL) を自動的に生成します。RPC サーブレットに GET リクエストを発行する場合は、CLASS 照会引数を指定する必要があります。また、必要に応じて VERSION および STYLE 照会引数を指定することもできます。CLASS 照会引数は、WSDL を生成する対象の SOAP サービスの CLASS を指定します。VERSION および STYLE パラメータは、生成する WSDL のタイプを指定するために使用します。STYLE および VERSION パラメータの詳細については、Management Webjectの「Generate-WSDL」セクションの Webject の説明を参照してください。
たとえば、以下のタイプ識別子の下に作成した Info*Engine SOAP サービスに対応するデフォルトの WSDL を生成するとします。
com.myCompany.myService
この場合、WSDL の生成リクエストは以下のようになります。
http://<ホスト>/Windchill/servlet/RPC?CLASS=com.myCompany.myService
ユーザーの SOAP サービスを、Business Process Execution Language (BPEL) 記述からユーザーの SOAP メソッドを呼び出すようなタスクを持つサードパーティのサービス志向アーキテクチャ (SOA) プラットフォームと統合する場合、Info*Engine を WS-I に従った方法で動作させると統合が簡単になります。このような状況では、以下のような WSDL 生成リクエストを発行します。
http://<ホスト>/Windchill/servlet/RPC?CLASS=com.myCompany.myService
&VERSION=1.1&STYLE=document
Info*Engine Java Platform, Enterprise Edition (Java EE) コネクタは、WSDL を使用してクライアント側のソースコードを生成し、Info*Engine との対話を簡素化します。
Microsoft SOAP Toolkit では、WSDL を使用して、クライアントが呼び出せるリモートクラスとメソッド、各メソッドがサポートするパラメータ、および返される結果の種類を定義、検証、および制限します。Microsoft SOAP Toolkit の詳細およびダウンロードについては、次の URL を参照してください。
http://www.microsoft.com/downloads
ほかのサードパーティ製クライアントでも、WSDL を使用して、ソースコードを生成したり、Info*Engine との対話をサポートしたりすることができます。
以下の図は、SOAP クライアントが Info*Engine とどのように対話するかを示しています。
SOAP リクエストが作成される際に、Web サーバーは HTTP リクエストを処理し、それを SOAP RPC サーブレットに送ります。SOAP RPC サーブレットは Windchill Directory Server の LDAP リポジトリにアクセスして、実行するタスクを識別します。LDAP リポジトリでは、SOAP クライアントが実行できるメソッドに対して実行されるタスクを識別するタスク代理を作成しました。SOAP RPC サーブレットがタスク名およびその他のリクエスト情報を Info*Engine サーバーに送信し、Info*Engine サーバーがタスクを実行します。
Info*Engine サーバーがタスクを実行すると、適切なレスポンスが SOAP クライアントに送信されます。SOAP クライアントに送信されるレスポンスは、Info*Engine タスクから返されるデータによって決まります。SOAP クライアントによる起動用に作成されたタスクは、以下の値を返します。
intfloatdate などのプリミティブ値
Java Beans
プリミティブ値の配列
Java Beans の配列
Info*Engine コレクション、グループ、エレメント、属性、または文字列としてのグループ XML
Info*Engine グループが返され、そのリターンタイプが SOAP タスクで明示的に指定されていない場合、そのグループは、入力 $(@FORM[]group_out[0]) を使用して名付けられたグループの Info*Engine XML 表現を含む単一の文字列として SOAP クライアントに返されます。
エラーが検出されると、SOAP の障害がクライアントに返されます。この障害は、実装固有のメカニズムを使用して、SOAP クライアントにより処理されます。たとえば、Info*Engine Java EE コネクタのクライアントは、SOAP の障害を Java 例外として受信します。Visual Basic クライアントは、faultcodefaultstringfaultactordetail などのインスタンス変数を使用できます。
SOAP リクエスト
SOAP リクエストは、SOAP クライアントによって定義され、SOAP クライアントから Web サーバーに送信された後、SOAP RPC サーブレットに転送されます。SOAP RPC サーブレットは、以下の場所にあります。
http://<ホスト>/Windchill/servlet/RPC
ここで、Windchill は SOAP RPC サーブレットに対して定義された Web アプリケーションです。
SOAP リクエストの送信時、Info*Engine SOAP クライアントは、実行するメソッドとそれをサポートするクラスを指定する必要があります。この情報は、以下のような複数の方法で SOAP サービスに転送できます。
URI (Uniform Resource Identifier) の SOAPAction HTTP ヘッダ。以下の形式を使用します。
uri:ie-soap-rpc:class!method
ここで、method は実行するメソッド、class はメソッドをサポートするクラスです。
CLASS および METHOD 照会引数。
照会の引数として CLASS を指定し、METHOD を指定しない場合、SOAP サービスは SOAPAction HTTP ヘッダの次に SOAP メッセージ本文を調べてメソッド名を解決します。照会引数として METHOD を指定し、CLASS を指定しない場合、SOAP サービスは SOAPAction HTTP ヘッダーを調べてクラス名を解決します。
* 
SOAP サービスへの GET リクエストでは、CLASS パラメータを指定し、指定したクラスの WSDL ドキュメントを返す必要があります。SOAP サービスへの POST リクエストは、SOAP リクエストとして処理されます。
SOAP クライアントにより送信されるメソッドと、実行される Info*Engine タスクとの間の関連付けは、LDAP リポジトリでも、タスク代理エントリとして維持されます。SOAP クライアントにより送信されるクラスは、LDAP リポジトリで維持されているタイプ識別子に対応します。タイプ識別子はオブジェクトのタイプ (またはクラス) を表し、タスク代理 (またはメソッド) を含みます。タスクの呼び出しを処理する Info*Engine サーバーは、リポジトリタイプを宣言するリポジトリで表現されます。
リポジトリタイプは、情報システムの種類を表し、動作可能なオブジェクトタイプを保持します。リポジトリタイプには、タイプ識別子が含まれます。このリポジトリは、Info*Engine が使用する Windchill Directory Server に保存されます。リポジトリ、リポジトリタイプ、タイプ識別子、およびタスク委任の詳細については、委任管理ユーティリティについてを参照してください。