WebSphere Enterprise Service Bus バージョン 6.2.0 オペレーティング・システム: AIX、HP-UX、i5/OS、Linux、Solaris、Windows


HTTP データ・バインディング

Service Component Architecture (SCA) メッセージと HTTP プロトコル・メッセージ間のデータの異なるマッピングごとに、データ・ハンドラーまたは HTTP データ・バインディングを構成する必要があります。データ・ハンドラーは、バインディングに関して中立的なインターフェースを提供します。 このインターフェースは複数のトランスポート・バインディングに渡って再利用が可能であり、推奨される方法を表します。データ・バインディングは特定のトランスポート・バインディングに固有です。3 つの HTTP 固有のデータ・バインディング・クラスが提供されるほか、カスタム・データ・ハンドラーまたはデータ・バインディングを作成することもできます。

HTTP インポートおよび HTTP エクスポートに使用する 3 つのデータ・バインディングが提供されます。それらは、バイナリー・データ・バインディング、XML データ・バインディング、および SOAP データ・バインディングです。応答データ・バインディングは、片方向の操作には必要ありません。 データ・バインディングは、インスタンスが HTTP と ServiceDataObject の間で両方向に変換可能な Java™ クラスの名前によって表されます。エクスポートでは関数セレクターを使用する必要があります。関数セレクターは、使用されるデータ・バインディングと呼び出される操作を、メソッド・バインディングと連動して判別できます。提供されるデータ・バインディングは、次のとおりです。

カスタム HTTP データ・バインディングの実装

このセクションでは、カスタム HTTP データ・バインディングを実装する方法を説明します。
注: 推奨される方法は、カスタム・データ・ハンドラーを実装する方法です。カスタム・データ・ハンドラーは複数のトランスポート・バインディング間で再利用できるためです。

HTTPStreamDataBinding は、カスタム HTTP メッセージを処理するための主要なインターフェースです。このインターフェースは大きなペイロードを処理できるように設計されています。しかし、そのような実装を機能させるために、このデータ・バインディングは、ストリームにメッセージを書き込む前に制御情報とヘッダーを返す必要があります。

メソッドとその実行順序 (以下を参照) は、カスタム・データ・バインディングによって実装する必要があります。

データ・バインディングをカスタマイズするには、HTTPStreamDataBinding を実装するクラスを作成します。 データ・バインディングには、以下の 4 つの private プロパティーが必要です。
  • private DataObject pDataObject
  • private HTTPControl pCtrl
  • private HTTPHeaders pHeaders
  • private yourNativeDataType nativeData
HTTP バインディングは、カスタマイズされたデータ・バインディングを以下の順序で呼び出します。
  • アウトバウンド処理 (DataObject からネイティブ・フォーマットへ):
    1. setDataObject(...)
    2. setHeaders(...)
    3. setControlParameters(...)
    4. setBusinessException(...)
    5. convertToNativeData()
    6. getControlParameters()
    7. getHeaders()
    8. write(...)
  • インバウンド処理 (ネイティブ・フォーマットから DataObject へ):
    1. setControlParameters(...)
    2. setHeaders(...)
    3. convertFromNativeData(...)
    4. isBusinessException()
    5. getDataObject()
    6. getControlParameters()
    7. getHeaders()

convertFromNativeData(...) で setDataObject(...) を呼び出して、dataObject の値を設定する必要があります。dataObject は、ネイティブ・データから private プロパティー「pDataObject」に変換されます。

public void setDataObject(DataObject dataObject)
			throws DataBindingException {
		pDataObject = dataObject;

}
public void setControlParameters(HTTPControl arg0) {
		this.pCtrl = arg0;
}

public void setHeaders(HTTPHeaders arg0) {
		this.pHeaders = arg0;
}
/*
* pHeaders に HTTP ヘッダー「IsBusinessException」を追加します。
* 以下の 2 つのステップを実行します。
* 1. まず IsBusinessException という名前 (大/小文字を区別しない) を持つ
*    ヘッダーをすべて削除します。
*    これは、1 つのヘッダーのみが存在するようにするためです。
* 2. 新しいヘッダー「IsBusinessException」を追加します。
*/
public void setBusinessException(boolean isBusinessException) {
		// まず IsBusinessException という名前 (大/小文字を区別しない) を持つ
  // ヘッダーをすべて削除します。
		// これは、1 つのヘッダーのみが存在するようにするためです。
		// 新しいヘッダー「IsBusinessException」を追加します。
		// コード例は以下のとおりです。
		HTTPHeader header=HeadersFactory.eINSTANCE.createHTTPHeader();
		header.setName("IsBusinessException");
		header.setValue(Boolean.toString(isBusinessException));
		this.pHeaders.getHeader().add(header);
		
}
public HTTPControl getControlParameters() {
		return pCtrl;
}
public HTTPHeaders getHeaders() {
		return pHeaders;
}
public DataObject getDataObject() throws DataBindingException {
		return pDataObject;
}
/*
* pHeaders からヘッダー「IsBusinessException」を取得し、そのブール値を返す
*/
public boolean isBusinessException() {
		String headerValue = getHeaderValue(pHeaders,"IsBusinessException");
		boolean result=Boolean.parseBoolean(headerValue);
		return result;
}
public void convertToNativeData() throws DataBindingException {
		DataObject dataObject = getDataObject();
		this.nativeData=realConvertWorkFromSDOToNativeData(dataObject);
}
public void convertFromNativeData(HTTPInputStream arg0){
		// HTTPInpurtStream からデータを読み取る
		// DataObject に変換する
		DataObject dataobject=realConvertWorkFromNativeDataToSDO(arg0);
		setDataObject(dataobject);
}
public void write(HTTPOutputStream output) throws IOException {
		if (nativeData != null)
		output.write(nativeData);
}

concept 概念トピック

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


タイムスタンプ・アイコン 最終更新: 2010/07/05


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.doc/doc/cadm_httpdatabindings.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています (http://www.eclipse.org)。