SDO メッセージにアクセスするための JAX-RPC ハンドラーの実装
JAX-RPC ハンドラーは、要求および応答メッセージの処理中に起動されます。 SOAP プロトコルを使用して交換されるメッセージの場合、各 JAX-RPC ハンドラーには SOAP 固有の MessageContext オブジェクトが渡されます。その他のプロトコルでは、IBM Web サービス・ランタイム環境は、メッセージのサービス・データ・オブジェクト (SDO) ビューを提供する MessageContext オブジェクトを渡します。サービス・データ・オブジェクト (SDO) は、異なるデータ・ソースからのデータを統一された方法で (データ・グラフとして) アプリケーションが取り扱えるようにするためのオープン・スタンダードです。
JAX-RPC ハンドラーがメッセージ・コンテキスト・プロパティーのみを扱う場合は、提供される MessageContext の特定のサブクラスを認識する必要はありません。なぜなら、コンテキスト・プロパティー・メソッドは MessageContext インターフェース自体で定義されるからです。ハンドラーがメッセージ内に含まれる情報を処理する必要がある場合は、必要サブクラスを使用して処理ができるようにコード化する必要があります。 JAX-RPC ハンドラーによって、MessageContext が必要なサブクラスのインスタンスであるかどうかを検査する必要があります。
- サービス統合バスからの JAX-RPC クライアントまたはアウトバウンドの起動により、 EJB バインディングを使用してサービスが起動されます。
- JAX-RPC クライアントは、非バウンド WSDL と対比して開発され、サービス統合バスにおいて宛先を再度ターゲットにします。
SDOMessageContext クラスは、処理中のメッセージを表す com.ibm.websphere.sdo.SDOMessage インスタンスを get および set するメソッドを提供します。SDOMessage には、メッセージ内容を SDO DataObject として保持する SDO DataGraph オブジェクトにアクセスするメソッドが与えられます。
JAX-RPC ハンドラーは SDO DataGraph 内容を変更することができますが、メッセージのフォーマットまたはスキーマを変更することはできません。
以下の例では、JAX-RPC ハンドラーの handleRequest メソッドで MessageContext オブジェクトから SDO DataGraph にアクセスするために使用できるコードを示します。
public boolean handleRequest(MessageContext messageContext) {
// Convert the MessageContext into an SDOMessageContext
if( messageContext instanceof SDOMessageContext) {
SDOMessageContext smc = (SDOMessageContext)messageContext;
// Retrieve the message
SDOMessage message = smc.getSDOMessage();
// Get the root object in the SDO DataGraph
DataGraph graph = message.getDataGraph();
DataObject content = graph.getRootObject();
// Now do something with the message content.....
}
return true;
}