Читает ли JasperReports метаданные столбцов перед созданием отчетов? - PullRequest
0 голосов
/ 22 декабря 2009

У меня есть несколько 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 для этого поля.

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

JasperReports сам не управляет ни преобразованием данных, ни длиной поля. Это похоже на проблему с драйвером JDBC.

Шерман Jaspersoft

1 голос
/ 22 декабря 2009

sun.io.ConversionBufferFullException генерируется sun.io преобразователями кодировки символов и может всплывать через java.io классы в старых версиях Java. Некоторое время этот API устарел и больше не используется, поскольку вместо него используется Java 6 - java.nio.charset.

Это ошибка преобразования символов в JasperReports, вашем драйвере JDBC или вещах, используемых этими двумя. Я не думаю, что это как-то связано с чтением метаданных из JDBC ResultSet само по себе, хотя это могут быть строки в метаданных, которые неправильно преобразованы.

Трудно свалить вину или придумать обходной путь без следа стека.

...