高度なカスタマイズ > Info*Engine ユーザーガイド > Web サービスフレームワーク > Info*Engine ベースの Web サービスの作成
  
Info*Engine ベースの Web サービスの作成
Web サービスが Info*Engine リリース 7.0 で最初にサポートされるようになって以来、Info*Engine ベースの Web サービスを作成する方法は変わっていません。JAX-WS ベースの Web サービスについては、1 つ変更点があり、アタッチメントの付いた SOAP がサポートされるようになりました。詳細については、SOAP アタッチメントの使用を参照してください。
Info*Engine ベースの Web サービスを作成するだけではなく、Java ベースの Web サービスを作成することもできます。セクションセキュリティ要件についての「トラストストアとキーストア」で説明されている <Windchill>/prog_examples/jws にあるリリース済みの例がそれを示しています。
Info*Engine ベースの Web サービスは一連の Info*Engine タスクで構成され、それぞれのタスクはタイプ識別子に関連付けられている Web サービスのメソッドを表します。Web サービスの場合、タイプ識別子は、単に一連の Info*Engine タスクを論理的にグループ化して Web サービスを形成する方法として使用され、静的なメソッドのみを公開する Java クラスに類似するものと考えることができます (Info*Engine タスクであるそれぞれのメソッドは対応する Web サービス操作をサポート)。
実行時、Info*Engine は、タイプ識別子と対応する Info*Engine タスクが LDAP で Info*Engine のコンフィギュレーションに登録されていることを必要とします。これを手動で行うことはできますが、プロセスが使用されることがあり、エラーが発生しやすいため、Info*Engine は、Web サービスの基盤である Info*Engine タスクをパッケージ化してインストールする Apache Ant ツーリングとともにリリースされています。これらのユーティリティは、Apache Ant フレームワークと統合されています。
このセクションでは、以下の手順を使用して簡単な Info*Engine タスクベースの Web サービスおよびクライアントを作成する方法について説明します。
1. Web サービスのタスクとクライアントのソースを格納するためのプロジェクトを作成します (これは単純なディレクトリ構造です)。
2. いくつかの非常に基本的なタスクを作成します。
3. JAX-WS Web サービスのセキュリティを確保し、それを展開します。これを行うには、Info*Engine タスクと対応するサーブレットを展開します。
開始する前に
このセクションの手順を完了するには、以下の前提条件を満たしている必要があります。
すべてのコマンドが Windchill シェルから実行されている。
セクションセキュリティ要件についての「トラストストアとキーストア」で説明されている Apache Ant スクリプトをすでに実行している。
このコマンドの例は、Unix 環境であることを前提としています。Windows 環境である場合は、オペレーティングシステム固有のコマンドを、使用している環境に適合するように変更する必要があります (たとえば、パスで / ではなく \ を使用するなど)。
プロジェクトの作成
Web サービスのフレームワークとともに、Web サービスとクライアントの新規作成を簡素化するツールがリリースされています。
このプロジェクトの例では、基本的な数学演算を実行する簡単な Web サービスを作成します。
* 
このサービスは、説明に使用することのみを目的としており、Info*Engine を使用して一般的に作成されるものとは異なります。
<Windchill>/bin/adminTools/WebServices/new-project.xml Apache Ant ビルドスクリプトを使用してプロジェクトを作成します。このスクリプトは、クライアントプロジェクト、サービスプロジェクト、またはその両方を作成するために使用できます。
% cd <Windchill>
% mkdir prog_examples/jws/MyProject
% ant -Dproject.dir=<Windchill>/prog_examples/jws/MyProject -Dservlet.name=MathService
-Dsecurity.policy=userNameAuthSymmetricKeys -Dservice.type.id=org.myorg.MathService
-Dmain.class=org.myorg.MathClient
-f bin/adminTools/WebServices/new-project.xml create
* 
project.dir プロパティは絶対パスです。これにより、プロジェクトが適切なロケーションに作成されます。new-project.xml ビルドスクリプトによってサポートされている入力オプションを確認するには、引数を使用せずにそれを実行します。例:
ant -f bin/adminTools/WebServices/new-project.xml
これにより、以下の構造が prog_examples/jws/MyProject ディレクトリ内に作成されます。
src/
Web サービスのベースディレクトリ (サーバー側)。
src//build.xml
Web サービスを構築し、展開するために使用されるビルドスクリプト。
src/tasks/org/myorg/MathService
Info*Engine タスクを作成できるサブディレクトリ。必要に応じて、ユーザーの要件に適合する別のディレクトリ階層を作成することもできます。これらのツールは、プロジェクトの作成時にユーザーが service.type.id プロパティで指定したタイプ識別子を使用してサービスをパッケージ化します。
src_client/
Web サービスクライアントのベースディレクトリ。
src_client/build.xml
Web サービスクライアントを構築するために使用されるビルドスクリプト。
src_client/org/myorg/MathClient.java
Web サービスクライアントの開始部分。
生成された 2 つの build.xml スクリプトのコンテンツを確認して、それらの機能を理解します。
src および src_client ディレクトリ内からフレームワークについての知識を深めるには、以下の ant コマンドを実行します。
% ant -p
% ant usage
最初のコマンドは、関連付けられているビルドスクリプトのパブリックターゲットとその説明を表示します。2 番目のコマンドは、ビルドスクリプトをカスタマイズする必要がある場合にそれを行う方法の詳細な説明を表示します。ほとんどの基本的なプロジェクトにおいて、これは必要ではありません。
Web サービス用の Info*Engine タスクの作成
この手順では、4 つの簡単なタスク (Add.xmlDivide.xmlMultiply.xmlSubtract.xml) が、以下のソースが指定されているロケーションに作成されます。これらのタスクは非常に単純であり、主にドキュメンテーションを含んでいることに注意してください。
Add.xml
ソース: <Windchill>/prog_examples/jws/MyProject/src/tasks/org/myorg/MathService/Add.xml
<%@page language="java"%>
<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core" prefix="ie"%>
<%@taglib uri="/com/infoengine/tlds/iejstl.tld" prefix="c"%>
<!--com.infoengine.soap.rpc.def
Generates the sum of two integers.
<p>Supply two integers, a and b. You can subtract
integers using the {@link Subtract} method.
@param int a The first integer.
@param int b The second integer.
@return int ${output[0]result[0]} The sum of a and b.
@see Multiply
@see Divide
@see Subtract
-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="GROUP_OUT" data="output"/>
</ie:webject>
<!-- just so non-web service clients could call this task
coerce a to an int, in case it isn’t already -->
<c:set var="A" value="${0+@FORM[0]a[0]}" />
<c:set var="${output[0]result}" value="${A+@FORM[0]b[0]}" />
Divide.xml
ソース: <Windchill>/prog_examples/jws/MyProject/src/tasks/org/myorg/MathService/Divide.xml
<%@page language="java"%>
<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core" prefix="ie"%>
<%@taglib uri="/com/infoengine/tlds/iejstl.tld" prefix="c"%>
<!--com.infoengine.soap.rpc.def
Generates the result of dividing two integers.
<p>Supply two integers, a and b. You can multiply
integers using the {@link Multiply} method.
@param int a The first integer.
@param int b The second integer.
@return float ${output[0]result[0]} The sum of a and b.
@see Multiply
@see Divide
@see Subtract
-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="GROUP_OUT" data="output"/>
</ie:webject>
<!-- just so non-web service clients could call this task
coerce a to an float, in case it isn’t already -->
<c:set var="A" value="${0.0+@FORM[0]a[0]}" />
<c:set var="${output[0]result}" value="${A/@FORM[0]b[0]}" />
Multiply.xml
ソース: <Windchill>/prog_examples/jws/MyProject/src/tasks/org/myorg/MathService/Multiply.xml
<%@page language="java"%>
<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core" prefix="ie"%>
<%@taglib uri="/com/infoengine/tlds/iejstl.tld" prefix="c"%>
<!--com.infoengine.soap.rpc.def
Generates the product of two integers.
<p>Supply two integers, a and b. You can divide
integers using the {@link Divide} method.
@param int a The first integer.
@param int b The second integer.
@return int ${output[0]result[0]} The sum of a and b.
@see Multiply
@see Divide
@see Subtract
-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="GROUP_OUT" data="output"/>
</ie:webject>
<!-- just so non-web service clients could call this task
coerce a to an int, in case it isn't already -->
<c:set var="A" value="${0+@FORM[0]a[0]}" />
<c:set var="${output[0]result}" value="${A*@FORM[0]b[0]}" />
Subtract.xml
ソース: <Windchill>/prog_examples/jws/MyProject/src/tasks/org/myorg/MathService/Subtract.xml
<%@page language="java"%>
<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core" prefix="ie"%>
<%@taglib uri="/com/infoengine/tlds/iejstl.tld" prefix="c"%>
<!--com.infoengine.soap.rpc.def
Generates the difference of two integers.
<p>Supply two integers, a and b. You can add
integers using the {@link Add} method.
@param int a The first integer.
@param int b The second integer.
@return int ${output[0]result[0]} The sum of a and b.
@see Multiply
@see Divide
@see Subtract
-->
<ie:webject name="Create-Group" type="GRP">
<ie:param name="GROUP_OUT" data="output"/>
</ie:webject>
<!-- just so non-web service clients could call this task
coerce a to an int, in case it isn't already -->
<c:set var="A" value="${0+@FORM[0]a[0]}" />
<c:set var="${output[0]result}" value="${A-@FORM[0]b[0]}" />
Web サービスの展開
このプロジェクトが作成されたときに、userNameAuthSymmetricKeys の値が明示的に渡される security.policy というパラメータが指定されています。したがって、この例では、ユーザー名とパスワードの両方を Web サービスクライアントに指定する必要があります。
Web サービスを生成して展開するには、以下のコマンドを実行します。
% cd <Windchill>/prog_examples/MyProject/src
% ant
* 
Apache Ant スクリプトを実行するために Windchill がアクティブである必要はありません。
ここで、Windchill を起動 (または再起動) して展開を終了します。
Apache Ant スクリプトは、引数を使用せずに実行すると、Web サービスをパッケージ化し、インストールして展開します。
サービスが Windchill でパッケージ化され、コンパイルされてインストールされます。Info*Engine タスクベースのサービスの場合、タスクは PTCTAR ファイルにパッケージ化されてインストールされます。この例では、結果の PTCTAR ファイルは以下のようになります。
<Windchill>/prog_examples/jws/MyProject/dist_server/mathservice.ptctar
Web サービスが Java オブジェクトを必要とする場合は、src ディレクトリ内にこれらのオブジェクトのパッケージ階層とソースを作成します。スクリプトが自動的にこれらのクラスをコンパイルしてパッケージ化します。Web サービスに関連付けられているクラスは、サービスのサーブレット名を反映する JAR ファイル内の <Windchill>/codebase/WEB-INF/lib でパッケージ化されます。
次に、<Windchill>/bin/adminTools/WebServices/build.xml スクリプトが実行されて、サーバー側のコンポーネントが生成され、コンパイルされると同時に、セキュリティが確保された Web サービスが展開されます。このビルドスクリプトは、必要に応じて、自動で実行することもできます。詳細については、Web サービス展開用ビルドスクリプトの使用を参照してください。
* 
Apache Ant フレームワークを使用する場合、このビルドスクリプトを手動で実行する必要はありません。Apache Ant フレームワークは、すでにシステムにインストールされている既存のレガシー Web サービスを展開するために使用することもできます。この場合、src ディレクトリには build.xml スクリプトのみが含まれ、タスクソースは含まれません。
これでサービスが展開され、Windchill が実行されるようになったため、以下のような URL を閲覧することで、Web サービスの WSDL を確認できます。
http://<ホスト>/Windchill/servlet/MathService?wsdl
Java ベースの Web サービスクライアントの作成で説明されているように、Java クライアントを作成する場合、WSDL にアクセスする方法を知っておく必要はありません。ただし、サービスを別の Web サービスクライアントと統合する場合は、WSDL にアクセスする必要があります。
Web サービスの展開解除
Web サービスの展開をインストールから解除する場合は、プロジェクトの src/build.xml スクリプトの undeploy ターゲットを実行します例:
% cd <Windchill>/prog_examples/MyProject/src
% ant undeploy
undeploy ターゲットは、以下の操作を完了します。
web.xml からサーブレットのコンフィギュレーションを削除します。
sun-jaxws.xml から Web サービスのコンフィギュレーションを削除します。
セキュリティポリシーのコンフィギュレーションファイルを削除します。
Web サービスをサポートする JAR ファイルを削除します。
Info*Engine タスクをアンインストールします (サービスが Info*Engine タスクベースである場合)。
Info*Engine ベースの Web サービスのパラメータとタスクのドキュメンテーション
Info*Engine タスクを適切に文書化するプロセスについて理解しておく必要があります。オンラインで次の URL にアクセスして、新規 Web サービスに関するドキュメントを参照してください。
http://<ホスト>/Windchill/infoengine/jsp/tools/doc/index.jsp
* 
このユーティリティは、タイプ識別子の下で登録されているいくつかのインストール済みのタスクに関するドキュメンテーションを提供します。これらのタスクのほとんどは、Web サービスとしてアクセスされるために作成されていないため、そのような目的では使用しないでください。
Web ブラウザのリポジトリタイプの表示枠から com.ptc.windchill を選択します。クラスの表示枠から org.myorg.MathService サービスのタイプ識別子を選択します。表示されるドキュメンテーションは、展開したタスクのコンテンツに基づいて決定されます。タスクのドキュメンテーションの作成の詳細については、以下を参照してください。
http://<ホスト>/Windchill/infoengine/jsp/tools/doc/howto.html
SOAP タスクの作成の詳細については、SOAP サービスを参照してください。