Service Component Architecture (SCA) メッセージと HTTP プロトコル・メッセージ間のデータの異なるマッピングごとに、データ・ハンドラーまたは HTTP データ・バインディングを構成する必要があります。データ・ハンドラーは、バインディングに関して中立的なインターフェースを提供します。 このインターフェースは複数のトランスポート・バインディングに渡って再利用が可能であり、推奨される方法を表します。データ・バインディングは特定のトランスポート・バインディングに固有です。3 つの HTTP 固有のデータ・バインディング・クラスが提供されるほか、カスタム・データ・ハンドラーまたはデータ・バインディングを作成することもできます。
<xsd:schema elementFormDefault="qualified" targetNamespace="http://com.ibm.websphere.http.data.bindings/schema" xmlns:tns="http://com.ibm.websphere.http.data.bindings/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="HTTPBaseBody"> <xsd:sequence/> </xsd:complexType> <xsd:complexType name="HTTPBytesBody"> <xsd:complexContent> <xsd:extension base="tns:HTTPBaseBody"> <xsd:sequence> <xsd:element name="value" type="xsd:hexBinary"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>
HTTPStreamDataBinding は、カスタム HTTP メッセージを処理するための主要なインターフェースです。このインターフェースは大きなペイロードを処理できるように設計されています。しかし、そのような実装を機能させるために、このデータ・バインディングは、ストリームにメッセージを書き込む前に制御情報とヘッダーを返す必要があります。
メソッドとその実行順序 (以下を参照) は、カスタム・データ・バインディングによって実装する必要があります。
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); }