269.5. RFC のメッセージボディー
要求および応答オブジェクト
SAP エンドポイントは、SAP リクエストオブジェクトを含むメッセージボディーを持つメッセージを受信し、SAP 応答オブジェクトが含まれるメッセージのボディーが含まれるメッセージを返します。SAP リクエストと応答は、名前付きフィールドを含む名前付きフィールドを含むデータ構造を、事前定義したデータタイプを持つ固定です。
SAP リクエストと応答の名前付きフィールドは SAP エンドポイントに固有のもので、SAP リクエストのパラメーターを定義するエンドポイントごとに、受け入れる応答があります。SAP エンドポイントは、それに固有のリクエストおよび応答オブジェクトを作成するためのファクトリーメソッドを提供します。
public class SAPEndpoint ... { ... public Structure getRequest() throws Exception; public Structure getResponse() throws Exception; ... }
構造オブジェクト
SAP リクエストおよび応答オブジェクトはいずれも、org.fusesource.camel.component.sap.model.rfc.Structure
インターフェースをサポートする構造オブジェクトとして Java で表されます。このインターフェースは、java.util.Map
インターフェースと org.eclipse.emf.ecore.EObject
インターフェースの両方を拡張します。
public interface Structure extends org.eclipse.emf.ecore.EObject, java.util.Map<String, Object> { <T> T get(Object key, Class<T> type); }
構造オブジェクトのフィールド値は、マップインターフェースのフィールドの getter メソッドを介してアクセスされます。さらに、構造インターフェースは、フィールド値を取得するタイプ制限方法を提供します。
構造オブジェクトは、Eclipse Modeling Framework(EMF)を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject
インターフェースをサポートします。構造オブジェクトのインスタンスには、提供されるフィールドのマップの構造と内容を定義して制限する meta-data がアタッチされています。このメタデータには、EMF が提供する標準メソッドを使用してアクセスし、イントロスペクションすることができます。詳細は、EMF ドキュメントを参照してください。
構造オブジェクトに定義されていないパラメーターの取得を試みると、null を返します。構造に定義されていないパラメーターの設定を試みると、例外がスローされ、間違ったタイプでパラメーターの値を設定しようとします。
以下のセクションで説明されているように、構造オブジェクトには、複雑なフィールドタイプの値( STRUCTURE
および TABLE
)が含まれるフィールドを含めることができます。これらのタイプのインスタンスを作成して構造に追加する必要はないことに注意してください。エンクロージング構造でアクセスする際に必要に応じて、このフィールド値のインスタンスがオンデマンドで作成されます。
フィールドタイプ
SAP リクエストまたはレスポンスの構造オブジェクト内にあるフィールドは、要素的 または 複雑 である場合があります。elementary フィールドにはスカラー値が 1 つ含まれますが、複雑なフィールドには、単数または複雑な型の 1 つ以上のフィールドが含まれます。
要素フィールドタイプ
要素フィールドには、文字、数字、16 進数、または文字列フィールドタイプを使用できます。以下の表は、構造オブジェクトに存在する可能性のある要素フィールドのタイプをまとめたものです。
フィールドタイプ | 対応する Java タイプ | Byte Length | Unicode Byte Length | number Decimals Digits | 説明 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP Type 'C': サイズ化された文字文字列を修正 |
|
| 8 | 16 | - | ABAP タイプ 'D': 日付(形式: YYYYMMDD) |
|
| 1 から 16 | 1 から 16 | 0 から 14 | ABAP Type 'P': Packed BCD 番号。BCD 番号には、1 バイトあたり 2 桁の数字が含まれます。 |
|
| 6 | 12 | - | ABAP タイプ 'T': 時間(形式: HHMMSS) |
|
| 1 から 65535 | 1 から 65535 | - | ABAP Type 'X':Fixed sized byte array |
|
| 1 から 65535 | 1 から 65535 | - | ABAP Type 'N': サイズ化された数値文字列の修正 |
|
| 8 | 8 | 0 から 15 | ABAP Type 'F': Floating Point number |
|
| 4 | 4 | - | ABAP Type 'I': 4 バイト整数 |
|
| 2 | 2 | - | ABAP Type 'S': 2 バイト整数 |
|
| 1 | 1 | - | ABAP Type 'B': 1 バイト整数 |
|
| 8 | 8 | 16 | ABAP Type 'decfloat16': 8 -byte Decimal Floating Point Number |
|
| 16 | 16 | 34 | ABAP Type 'decfloat34': 16 バイトデクリアル浮動小数点数 |
|
| 8 | 8 | - | ABAP Type 'G': 変数の長さの文字列 |
|
| 8 | 8 | - | ABAP Type 'Y': 変数長バイト配列 |
文字フィールドタイプ
文字フィールドには、基礎となる JCo および ABAP ランタイムでUnicode 以外の文字エンコーディングを使用できる固定された文字文字列が含まれます。ユニコード以外の文字文字列は、1 バイトごとに 1 文字エンコードされます。Unicode 文字文字列は、UTF-16 エンコーディングを使用して 2 つのバイトでエンコードされます。文字フィールドの値は Java で java.lang.String
オブジェクトとして表され、基礎となる JCo ランタイムは ABAP 表現への変換を行います。
文字フィールドは、関連付けられた バイト長と
プロパティーでフィールドの長さを宣言します。これは、各エンコーディングシステムのフィールドの文字文字列の長さを決定します。
unicodeByteLength
CHAR
-
CHAR
文字フィールドは、英数字を含むテキストフィールドで、ABAP タイプ C に対応します。 NUM
-
NUM
文字フィールドは数字のみが含まれる数値テキストフィールドで、ABAP タイプ N に対応します。 DATE
-
DATE
文字フィールドは 8 文字の日付フィールドで、YYYYMMDD
としてフォーマットされた月、日付け、および ABAP タイプ D に対応します。 時間
-
TIME
文字フィールドは、時間、分、秒がHHMMSS
としてフォーマットされ、ABAP タイプ T に対応する 6 文字の時間フィールドです。
数値フィールドタイプ
数値フィールドには数字が含まれます。以下の数値フィールドタイプがサポートされます。
INT
-
INT
数値フィールドは、基礎となる JCo および ABAP ランタイムの 4 バイトの整数値として保存される整数値で、ABAP タイプ I に対応します。INT
フィールドの値は、Java でjava.lang.Integer
オブジェクトとして表します。 INT2
-
INT2
数値フィールドは、基礎となる JCo および ABAP ランタイムの 2 バイトの整数値として保存される整数値で、ABAP タイプ S に対応します。INT2
フィールドの値は、Java でjava.lang.Integer
オブジェクトとして表します。 INT1
-
INT1
フィールドは、基礎となる JCo および ABAP ランタイム値の 1 バイトの整数値として保存される整数値で、BAAP タイプ B に対応します。INT1
フィールドの値は、Java でjava.lang.Integer
オブジェクトとして表します。 浮動小数点
-
FLOAT
フィールドは、基礎となる JCo および ABAP ランタイムの 8 バイトの二重値として保存されるバイナリー浮動小数点数フィールドで、ABAP タイプ F に対応します。FLOAT
フィールドは、フィールドの値が関連する 10 進数プロパティーに含まれる 10 進数の数字を宣言します。FLOAT
フィールドの場合、この 10 進数プロパティーには 1 桁から 15 桁の数字の値を指定できます。FLOAT
フィールドの値は、Java でjava.lang.Double
オブジェクトとして表されます。 BCD
-
BCD
フィールドは、基礎となる JCo および ABAP ランタイムの 1 から 16 バイトパック番号として保存されたバイナリーコード 10 進数フィールドで、ABAP タイプ P に対応します。パック番号は、1 バイトあたり 10 進数のデータを格納します。BCD
フィールドは、関連付けられたバイト長および
プロパティーでフィールドの長さを宣言します。unicodeByteLength
BCD
フィールドの場合、これらのプロパティーは 1 バイトから 16 バイトの間に値を持ち、両方のプロパティーに同じ値が設定されます。BCD
フィールドは、フィールドの値が関連付けられた 10 進数プロパティーに含まれる 10 進数の数を宣言します。BCD
フィールドの場合、この 10 進数プロパティーには 1 桁から 14 桁の値を使用できます。BCD
フィールドの値は、Java でjava.math.BigDecimal
として表されます。 DECF16
-
DECF16
フィールドは 10 進数の浮動小数点として、基礎となる JCo および ABAP ランタイムの 8 バイトの IEEE 754 浮動小数点として保存され、ABAP タイプのdecfloat16
に対応します。DECF16
フィールドの値には 16 桁の数字があります。DECF16
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。 DECF34
-
DECF34
フィールドは 10 進数の浮動小数点として、基礎となる JCo および ABAP ランタイムの 16 バイトの IEEE 754 浮動小数点として保存され、ABAP タイプのdecfloat34
に対応します。DECF34
フィールドの値には、34 桁の数字があります。DECF34
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。
16 進数のフィールドタイプ
16 進数フィールドには raw バイナリーデータが含まれます。以下の 16 進数のフィールドタイプがサポートされます。
BYTE
-
BYTE
フィールドは、基礎となる JCo および ABAP ランタイムのバイト配列として保存される固定されたバイト文字列で、ABAP タイプ X に対応します。BYTE
フィールドは、関連するバイト長および
プロパティーでフィールドの長さを宣言します。unicodeByteLength
BYTE
フィールドの場合、これらのプロパティーの値は 1 から 65535 バイトで、両方のプロパティーの値は同じになります。BYTE
フィールドの値は、Java でbyte[]
オブジェクトとして表されます。
string field types
文字列フィールドは変数長の文字列値を参照します。その文字列値の長さは、ランタイムまで固定されません。文字列値のストレージは、基礎となる JCo および ABAP ランタイムに動的に作成されます。文字列フィールド自体のストレージが修正され、文字列ヘッダーのみが含まれます。
STRING
-
STRING
フィールドは文字文字列を参照し、基盤となる JCo および ABAP ランタイムに 8 バイトの値として保存されます。これは ABAP タイプ G に対応します。STRING
フィールドの値は Java でjava.lang.String
オブジェクトとして表されます。 XSTRING
-
XSTRING
フィールドはバイト文字列を参照し、基盤となる JCo および ABAP ランタイムに 8 バイトの値として保存されます。これは ABAP タイプ Y に対応します。STRING
フィールドの値は Java でbyte[]
オブジェクトとして表されます。
複雑なフィールドタイプ
複雑なフィールドは structure または table フィールドタイプのいずれかになります。以下の表では、これらの複雑なフィールドタイプをまとめています。
フィールドタイプ | 対応する Java タイプ | Byte Length | Unicode Byte Length | number Decimals Digits | 説明 |
|
| 個別のフィールドバイト長の合計 | 個別のフィールド Unicode バイトの長さの合計 | - | ABAP Type 'u' & 'v': 異種構造 |
|
| 行構造のバイト長 | 行構造の Unicode バイト長 | - | ABAP Type 'h': Table |
構造のフィールド型
STRUCTURE
フィールドには構造オブジェクトが含まれ、BAAP 構造レコードとして基礎となる JCo および ABAP ランタイムに保存されます。ABAP タイプの u
または v
に対応します。STRUCTURE
フィールドの値は、Java で org.fusesource.camel.component.sap.model.rfc.Structure
のインターフェースを持つ構造オブジェクトとして表現されます。
テーブルフィールドタイプ
TABLE
フィールドには、テーブルオブジェクトが含まれており、BAAP 内部テーブルとして基礎となる JCo および ABAP ランタイムに保存されます。ABAP タイプ h
に対応します。フィールドの値は、テーブルオブジェクトにより、org.fusesource.camel.component.sap.model.rfc.Table
のインターフェースを持つテーブルオブジェクトによって Java で表されます。
テーブルオブジェクト
テーブルオブジェクトは、同じ構造を持つ構造オブジェクトの行が含まれる同種のリストデータ構造です。このインターフェースは、java.util.List
インターフェースと org.eclipse.emf.ecore.EObject
インターフェースの両方を拡張します。
public interface Table<S extends Structure> extends org.eclipse.emf.ecore.EObject, java.util.List<S> { /** * Creates and adds table row at end of row list */ S add(); /** * Creates and adds table row at index in row list */ S add(int index); }
テーブルオブジェクトの行のリストは、リストインターフェースで定義された標準のメソッドを使用してアクセスおよび管理されます。テーブルインターフェース以外に、構造オブジェクトを行リストに追加する 2 つのファクトリーメソッドが提供されます。
テーブルオブジェクトは、Eclipse Modeling Framework(EMF)を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject インターフェースをサポートします。テーブルオブジェクトのインスタンスには、提供される行の構造と内容を定義して制限する meta-data がアタッチされています。このメタデータには、EMF が提供する標準メソッドを使用してアクセスし、イントロスペクションすることができます。詳細は、EMF ドキュメントを参照してください。
誤ったタイプの行構造の値を追加または設定しようとすると、例外が発生します。