290.9. 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 モデリングフレームワーク (EMF) を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject
インターフェイスをサポートします。構造オブジェクトのインスタンスには、それが提供するフィールドのマップの構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細は、EMF のドキュメントを参照してください。
構造体オブジェクトで定義されていないパラメーターを取得しようとすると、null が返されます。構造体で定義されていないパラメーターを設定しようとすると、例外がスローされ、パラメーターの値を正しくない型で設定しようとします。
次のセクションで説明するように、構造体オブジェクトには、複合フィールド型 STRUCTURE
および TABLE
の値を含むフィールドを含めることができます。
これらの型のインスタンスを作成して構造体に追加する必要はありません。これらのフィールド値のインスタンスは、必要に応じて、囲んでいる構造にアクセスするときにオンデマンドで作成されます。
フィールドの種類
SAP リクエストまたはレスポンスの構造オブジェクト内に存在するフィールドは、基本 または 複合 のいずれかです。基本フィールドには単一のスカラー値が含まれますが、複合フィールドには基本タイプまたは複合タイプのフィールドが 1 つ以上含まれます。
基本フィールドの種類
基本フィールドは、文字、数値、16 進数、または文字列のフィールドタイプです。次の表は、構造体オブジェクトに存在する可能性のある基本フィールドのタイプをまとめたものです。
フィールドタイプ | 対応 Java 型 | バイト長 | Unicode バイト長 | 数 小数 桁 | 説明 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'C': 固定サイズの文字列。 |
|
| 8 | 16 | - | ABAP タイプ 'D': 日付 (形式: YYYYMMDD)。 |
|
| 1 から 16 | 1 から 16 | 0 から 14 | ABAP タイプ 'P': パックされた BCD 番号。BCD 番号には、1 バイトあたり 2 桁が含まれます。 |
|
| 6 | 12 | - | ABAP タイプ 'T': 時間 (形式: HHMMSS)。 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'X': 固定サイズのバイト配列。 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'N': 固定サイズの数値文字列。 |
|
| 8 | 8 | 0 から 15 | ABAP タイプ 'F': 浮動小数点数。 |
|
| 4 | 4 | - | ABAP タイプ 'I': 4 バイト整数。 |
|
| 2 | 2 | - | ABAP タイプ 'S': 2 バイト整数。 |
|
| 1 | 1 | - | ABAP タイプ 'B': 1 バイト整数。 |
|
| 8 | 8 | 16 | ABAP タイプ 'decfloat16': 8 バイトの 10 進浮動小数点数。 |
|
| 16 | 16 | 34 | ABAP タイプ 'decfloat34': 16 バイトの 10 進浮動小数点数。 |
|
| 8 | 8 | - | ABAP タイプ 'G': 可変長文字列。 |
|
| 8 | 8 | - | ABAP タイプ 'Y': 可変長バイト配列。 |
文字フィールドの種類
文字フィールドには、基礎となる JCo および ABAP ランタイムで非 Unicode または Unicode 文字エンコーディングを使用できる固定サイズの文字列が含まれます。非 Unicode 文字列は、1 バイトあたり 1 文字をエンコードします。Unicode 文字列は、UTF-16 エンコーディングを使用して 2 バイトでエンコードされます。文字フィールドの値は、Java では java.lang.String
オブジェクトとして表され、基礎となる JCo ランタイムが ABAP 表現への変換を担当します。
文字フィールドは、関連する byteLength
および unicodeByteLength
プロパティーでそのフィールド長を宣言します。これらのプロパティーは、各エンコーディングシステムでのフィールドの文字列の長さを決定します。
CHAR
-
CHAR
文字項目は、英数字を含むテキスト項目であり、ABAP タイプ C に対応します。 NUM
-
NUM
文字フィールドは、数字のみを含む数値テキストフィールドであり、ABAP タイプ N に対応します。 DATE
-
DATE
文字フィールドは、年、月、日がYYYYMMDD
としてフォーマットされた 8 文字の日付フィールドであり、ABAP タイプ D に対応します。 TIME
-
TIME
文字フィールドは、時、分、および秒がHHMMSS
としてフォーマットされた 6 文字の時間フィールドであり、ABAP タイプ T に対応します。
数値フィールドの種類
数値フィールドには数値が含まれています。次の数値フィールドタイプがサポートされています。
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 バイトの整数値として格納される整数フィールドであり、ABAP タイプ B に対応します。INT1
フィールド値は、Java ではjava.lang.Integer
オブジェクトとして表されます。 FLOAT
-
FLOAT
フィールドは、基礎となる JCo および ABAP ランタイムに 8 バイトの double 値として格納される 2 進浮動小数点数フィールドであり、ABAP タイプ F に対応します。FLOAT
フィールドは、フィールドの値が関連する小数プロパティー。FLOAT
フィールドの場合、この 10 進プロパティーは 1 ~ 15 桁の値を持つことができます。FLOAT
フィールド値は、Java ではjava.lang.Double
オブジェクトとして表されます。 BCD
-
BCD
フィールドは、基礎となる JCo および ABAP ランタイムで 1 から 16 バイトのパック数として保管される 2 進化 10 進フィールドであり、ABAP タイプ P に対応します。パック数は、1 バイトあたり 2 桁の 10 進数を保管します。BCD
フィールドは、関連するbyteLength
およびunicodeByteLength
プロパティーでフィールド長を宣言します。BCD
フィールドの場合、これらのプロパティーは 1 - 16 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BCD
フィールドは、関連付けられた decimal プロパティーで、フィールドの値に含まれる 10 進数の桁数を宣言します。BCD
フィールドの場合、この 10 進プロパティーは 1 ~ 14 桁の値を持つことができます。BCD
フィールド値は、Java ではjava.math.BigDecimal
として表されます。 DECF16
-
DECF16
フィールドは、基礎となる JCo および ABAP ランタイムで 8 バイトの IEEE 754 decimal64 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat16
に対応します。DECF16
フィールドの値は、10 進数で 16 桁です。DECF16
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。 DECF34
-
DECF34
フィールドは、基礎となる JCo および ABAP ランタイムで 16 バイトの IEEE 754 decimal128 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat34
に対応します。DECF34
フィールドの値には、34 桁の 10 進数があります。DECF34
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。
16 進フィールドタイプ
16 進数フィールドには生のバイナリーデータが含まれます。次の 16 進数フィールドタイプがサポートされています。
BYTE
-
BYTE
フィールドは、基礎となる JCo および ABAP ランタイムにバイト配列として格納される固定サイズのバイト文字列であり、ABAP タイプ X に対応します。BYTE
フィールドは、関連するbyteLength
およびunicodeByteLength
プロパティーでフィールド長を宣言します。BYTE
フィールドの場合、これらのプロパティーは 1 - 65535 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BYTE
フィールドの値は、Java ではbyte[]
オブジェクトとして表されます。
文字列フィールドの種類
文字列フィールドは、可変長の文字列値を参照します。その文字列値の長さは実行時まで固定されません。文字列値のストレージは、基礎となる JCo および ABAP ランタイムで動的に作成されます。文字列フィールド自体のストレージは固定されており、文字列ヘッダーのみが含まれています。
STRING
-
STRING
フィールドは文字列を参照し、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納されます。ABAP タイプ G に対応します。STRING
項目の値は、Java ではjava.lang.String
オブジェクトとして表されます。 XSTRING
-
XSTRING
フィールドはバイト文字列を参照し、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納されます。ABAP タイプ Y に対応します。STRING
項目の値は、Java ではbyte[]
オブジェクトとして表されます。
複雑なフィールドタイプ
複合フィールドは、構造体またはテーブルフィールドタイプのいずれかです。次の表は、これらの複雑なフィールドタイプをまとめたものです。
フィールドタイプ | 対応 Java 型 | バイト長 | Unicode バイト長 | 数 小数 桁 | 説明 |
|
| 個々のフィールドのバイト長の合計 | 個々のフィールドの Unicode バイト長の合計 | - | ABAP タイプ 'u' および 'v': 異種構造 |
|
| 行構造体のバイト長 | 行構造体の Unicode バイト長 | - | ABAP タイプ 'h': テーブル |
構造体フィールドタイプ
STRUCTURE
項目には構造オブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 構造レコードとして格納されます。ABAP タイプ u
または v
のいずれかに対応します。STRUCTURE
項目の値は、Java ではインターフェイス org.fusesource.camel.component.sap.model.rfc.Structure
を持つ構造オブジェクトとして表されます。
テーブルフィールドタイプ
TABLE
フィールドにはテーブルオブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに 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 インターフェイスをサポートします。テーブルオブジェクトのインスタンスには、それが提供する行の構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細は、EMF のドキュメントを参照してください。
間違った型の行構造体の値を追加または設定しようとすると、例外がスローされます。