WebSphere Application Server Network Deployment for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

例: Web Services Addressing API を使用して汎用 Web サービス・リソース・インスタンスにアクセスする Web サービスの作成

Web サービスを使用して管理する必要があるネットワーク・プリンターを所有する IT 組織について検討します。 この組織では、各プリンターを、 エンドポイント参照によって指定するリソースとしています。 この例は、WebSphere Application Server が提供する、Web サービス・アドレッシング (WS-Addressing) アプリケーション・プログラミング・インターフェイス (API) を使用したサービスのコード化方法を示しています。

エンドポイント参照をターゲット・サービスに戻す Web サービス・インターフェースの提供

この IT 組織では、CreatePrinter portType エレメントを提供する PrinterFactory サービスをインプリメントします。 この portType エレメントは、CreatePrinterRequest メッセージを受け入れ、論理プリンターを示すリソースを作成し、 そのリソースへの参照となるエンドポイント参照をつけて応答します。

このような PrinterFactory サービスの WSDL 定義には、以下のコードが含まれています。
<wsdl:definitions targetNamespace="http://example.org/printer" ...
                  xmlns:pr=" http://example.org/printer">
  <wsdl:types>
    ...
    <xsd:schema...>
      <xsd:element name="CreatePrinterRequest"/>
      <xsd:element name="CreatePrinterResponse" 
                   type="wsa:EndpointReferenceType"/>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="CreatePrinterRequest">
    <wsdl:part name="CreatePrinterRequest" 
               element="pr:CreatePrinterRequest" />
  	</wsdl:message>
  <wsdl:message name="CreatePrinterResponse">
    <wsdl:part name="CreatePrinterResponse" 
               element="pr:CreatePrinterResponse" />
  	</wsdl:message>
  <wsdl:portType name="CreatePrinter">
    <wsdl:operation name="createPrinter">
      <wsdl:input name="CreatePrinterRequest" 
                  message="pr:CreatePrinterRequest" />
      <wsdl:output name="CreatePrinterResponse"
                  message="pr:CreatePrinterResponse" />
    </wsdl:operation>
  </wsdl:portType>
</wsdl:definitions>

上記の例の CreatePrinter オペレーションは、 新規に作成されたプリンター・リソースを 示す wsa:EndpointReference オブジェクトを戻します。 クライアントは、このエンドポイント参照を使用して、プリンターを示すサービス・インスタンスにメッセージを送信します。

Web サービス・インターフェースのインプリメント

以下の例にある createPrinter メソッドは、 プリンター・サービスへのエンドポイント参照を作成します。 次に、そのオペレーションは、個々のプリンター・リソース・インスタンスの ID を取得し、 その ID をエンドポイント参照に関連付けます。 最後に createPrinter メソッドは、EndpointReference オブジェクトを戻します。 このオブジェクトが、新規プリンターとなります。

import com.ibm.websphere.wsaddressing.EndpointReferenceManager;
import com.ibm.websphere.wsaddressing.EndpointReference;
...
public Constants
{

// Create the printer
...

// Define the printer resource ID as a static constant as it is required in later steps
public static final QName PRINTER_ID_PARAM_QNAME = new QName("example.printersample","IBM_WSRF_PRINTERID", "ws-rf-pr" );
public static final QName PRINTER_SERVICE_QNAME = new QName("example.printer.com", "printer", "..."); 
public static final String PRINTER_ENDPOINT_NAME = new String("PrinterService");
}
public EndpointReference createPrinter(java.lang.Object createPrinterRequest)
{
 // Create an EndpointReference that targets the appropriate WebService URI and port name.
 EndpointReference epr =  EndpointReferenceManager.createEndpointReference(PRINTER_SERVICE_QNAME, PRINTER_ENDPOINT_NAME);
// Create or lookup the stateful resource and derive a resource
 // identifier string.
 String resource_identifier = ...;
 // Associate this resource identifier with the EndpointReference as  
 // a reference parameter.
 // The choice of name is arbitrary, but should be unique     
 // to the service.
 epr.setReferenceParameter(PRINTER_ID_PARAM_QNAME,resource_identifier);
 // The endpoint reference now targets the resource rather than the service.
 ...

 return epr;
}

着信メッセージを Web サービス・リソース・インスタンスとマッチングするためのターゲット・サービスの拡張

これまでに説明した Web サービス実装によって、 プリンター・リソース・インスタンスには、 そのエンドポイント参照で固有の ID が組み込まれます。 この ID は、Web サービスをターゲットとする、 後続のメッセージの SOAP ヘッダーで、 参照パラメーターになります。 また、Web サービスが着信メッセージを 適切なプリンターとマッチングさせるために、 この ID を使用できます。

Web サービスが、WS-Addressing メッセージの アドレッシング・プロパティーを含むメッセージを 受信すると、WebSphere Application Server は、 メッセージがアプリケーションのエンドポイントに ディスパッチされる前に、プロパティーを処理し、 スレッド上のメッセージ・コンテキストの中に、 このプロパティーを設定します。 以下の例で説明されているとおり、 Printer Web サービス・アプリケーションは、 MessageContext オブジェクトの ターゲット・エンドポイントに関連付けられている、 参照パラメーターにアクセスします。

import com.ibm.websphere.wsaddressing.EndpointReferenceManager; 
...
 // Initialize the reference parameter name
 QName name = new QName(..);
 // Extract the String value.
 String resource_identifier = 
        EndpointReferenceManager.getReferenceParameterFromMessageContext(PRINTER_ID_PARAM_QNAME);

Web サービス・インプリメンテーションは、getReferenceParameterFromMessageContext メソッドから獲得したプリンター ID に基づいて、メッセージを適切なプリンター・インスタンスに転送できます。

エンドポイント参照を使用したメッセージのエンドポイントへの送信

クライアントは、Java Naming Directory Interface (JNDI) 内の プリンター・サービスを検索するという、 通常の Java Platform, Enterprise Edition (Java EE) の 方法で、JAX-RPC Stub オブジェクトを取得します。 次に、クライアントは、以下の例にあるように、 あらかじめ取得しておいた EndpointReference オブジェクト を、Stub オブジェクトに関連付けます。
import javax.xml.rpc.Stub;
...
 // Associate the endpoint reference that represents the new printer with the Printer stub. 
 Printer p = (Printer)((new PrinterServiceLocator()).getPort(Printer.class));
 Stub printerStub = (javax.xml.rpc.Stub)p;
 printerStub._setProperty(
        "com.ibm.websphere.wsaddressing.WSAConstants.
                             WSADDRESSING_DESTINATION_EPR ", epr);
これで、Stub オブジェクトは、新規プリンター・リソース・インスタンスとなります。 クライアントはこのオブジェクトを使用して、Printer Web サービス経由でメッセージをプリンターに送信することができます。 クライアントが Stub オブジェクトを起動する際に、WebSphere Application Server は、該当するメッセージ・アドレッシング・プロパティーを、 メッセージ・ヘッダーに追加します。 この場合、このプロパティーが、 ターゲット・プリンター・リソースを 識別するエンドポイント参照に含まれる、 参照パラメーターになります。

代わりに、クライアントは Call オブジェクトを使用することができます。クライアントはこれらを、以下の例のように、新規プリンターを表すように構成します。

import javax.xml.rpc.Call;
...
 :
 // Associate the endpoint reference that represents the new printer with the call.
 call.setProperty(
        "com.ibm.websphere.wsaddressing.WSAConstants.
                             WSADDRESSING_DESTINATION_EPR ", epr);

クライアント側から見ると、エンドポイント参照は不透明です。 クライアントは、いずれのエンドポイント参照パラメーターの内容も解釈できず、 完全に使用できません。 クライアントは、エンドポイント参照のインスタンスを直接作成できません。 これは、参照パラメーターが、サービス・プロバイダー専用になっているためです。 クライアントは、サービス・プロバイダーからエンドポイント参照を取得し (例えば、プロバイダー・ファクトリー・サービスを通じて)、 そのエンドポイント参照を使用して、 エンドポイント参照によって表されている エンドポイントに、Web サービス・オペレーションを送信する必要があります。




関連概念
Web Services Addressing サポート
Web Services Resource Framework サポート
関連タスク
Web サービス・リソース・フレームワークを使用したステートフル Web サービスの作成
Web サービス・アドレッシング API の使用: エンドポイント参照を使用するアプリケーションの作成
関連資料
Web Services Addressing API
Web Services Addressing SPI
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 8:28:52 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.iseries.doc/info/iseriesnd/ae/xwbs_wsa.html