いくつかのJasperReportsを作成し、Windowsマシンで非常に正常に実行しています。この問題は、レポートがzOSオペレーティングシステムを搭載したメインフレームで実行されるように設定されたときに始まりました。
問題は、Jasperがレポートを作成するときに、データベースからテーブルのメタデータを読み取り、それに基づいてデータが来ることを期待しているように見えることです。
例:varchar(20)型の列がある場合、レポートフィールドがStringとして定義されている場合でも、Jasperは20文字だけ待機します。
これはWindows環境では発生しませんが、メインフレームでは文字エンコードはEBCDICであるため、列のメインフレームには19文字が含まれる可能性がありますが、エンコードすると23文字または24文字としてレポートに返されます。
注:この問題は、英語以外の文字でのみ発生します。
Jasperがレポートを作成しているときに、 UPDATE
AConversionBufferFull
がスローされます。メインフレームのログにアクセスできないため、完全なトレースがありません。この問題は、値が約17〜20文字の場合、COUNTRY_DESCと呼ばれる1つの列のみで発生し、例外が発生します。
前述したように、メインフレームの文字セットはEBCDICですが、JDBCを介して読み取ると、Unicodeに変換されます。たとえば、EBCDICでは、単語は17文字になりますが、変換すると22文字になります。奇妙な理由で、Jasperはこのフィールドにのみ20文字を期待しています。