ブローカーは、パーサーまたはシリアライザーを呼び出すときに、構文解析またはシリアライズされるデータの文字エンコード方式 (CCSID)および数値エンコード方式 (バイト・オーダーおよび浮動小数点表記) を定義するエンコード情報をパーサーまたはシリアライザーに提供します。
DFDL ドメインでメッセージが構文解析またはシリアライズされるときには、DFDL パーサーまたは DFDL シリアライザーが呼び出されます。 DFDL パーサーおよび DFDL シリアライザーがどのような方法でエンコード情報を使用するかは、DFDL メッセージ・モデルによって決まります。
DFDL メッセージ・モデルでは、タイプ定義ごとの DFDL プロパティーを使用して、文字エンコード方式 (CCSID)および数値エンコード方式 (バイト・オーダーおよび浮動小数点表記) を設定する必要があります。 DFDL は外部変数セットを事前定義します。それらのそれぞれにデフォルト値が設定されていますが、外部的にオーバーライドすることができます。 それらの事前定義の変数をブローカーがオーバーライドして、エンコード情報に含めて渡します。 DFDL の事前定義の変数について詳しくは、IBM WebSphere Message Broker の DFDL 事前定義変数を参照してください。
特定の静的タイプについてエンコード・プロパティーが DFDL メッセージ・モデルで設定されている場合、DFDL パーサーおよび DFDL シリアライザーは、その静的エンコード情報を使用してメッセージ・データを解釈し、ブローカーが個々のメッセージ・インスタンスについて提供するエンコード情報を無視します。 特定の静的タイプについてエンコード・プロパティーが DFDL メッセージ・モデルで設定されており、指定されたフォーマットでメッセージ・データがエンコードされない場合には、以下の問題が発生している可能性があります。
- 構文解析エラー (メッセージ・データが正しく解釈されていない)。
- 不正な数値 (誤ったバイト・オーダー (エンディアン) が使用されている)。
これらの問題を回避するには、DFDL メッセージ・モデルで DFDL エンコード・プロパティーを以下のように設定してください。
- encoding: {dfdl:encoding}
- byteOrder: {dfdl:byteOrder}
- binaryFloatRep: {dfdl:binaryFloatRep}
これらの設定により、DFDL パーサーは、ブローカーが個々のメッセージ・インスタンスについて取得する入力メッセージのトランスポート・ヘッダーなどのエンコード情報を使用して、データを正しく解釈できるようになります。 同様に、これらの設定では、データが DFDL シリアライザーで処理されるときに、ブローカー・プロパティーで定義されている値に従ってビット・ストリーム・データがエンコードされるようになります。