У меня есть несколько JasperReports, которые отлично работают на Windows-машине. Проблема началась, когда отчеты были настроены для работы на мэйнфрейме с операционной системой zOS.
Проблема в том, что когда Джаспер создает отчет, он, похоже, читает метаданные таблиц из базы данных и на их основе ожидает, что данные поступят.
Пример: если у меня есть столбец типа varchar (20), то Джаспер будет ждать только 20 символов, даже если поле отчета определено как String.
Этого не происходит в среде Windows, но на мейнфрейме кодировка символов - EBCDIC, поэтому столбец может содержать 19 символов на мейнфрейме, но при кодировании он возвращается в отчет в виде 23 или 24 символов.
Примечание: эта проблема возникает только в неанглийских символах.
UPDATE
ConversionBufferFull
выбрасывается, когда Джаспер создает отчет, у меня нет полной трассировки, так как я не могу получить доступ к журналу мэйнфрейма. Проблема возникает только с одним столбцом с именем COUNTRY_DESC, когда значение составляет около 17-20 символов, возникает исключение.
Как я уже говорил, набор символов на мэйнфрейме - это EBCDIC, но при чтении через JDBC он преобразуется в Unicode. например, в EBCDIC слово будет 17 символов, но при преобразовании оно станет 22. По какой-то странной причине Джаспер ожидает только 20 для этого поля.