ConversionException: неразборчивая дата в отчетах Jasper

Я работаю над системой, которая использует отчеты Jasper. Недавно начал выдавать такую ​​ошибку:

org.apache.commons.beanutils.ConversionException: Unparseable date: "03/03/1981"
        at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:241)
        at org.apache.commons.beanutils.locale.LocaleConvertUtilsBean.convert(LocaleConvertUtilsBean.java:285)
        at net.sf.jasperreports.engine.data.JRAbstractTextDataSource.convertStringValue(JRAbstractTextDataSource.java:69)
        at net.sf.jasperreports.engine.data.JRXmlDataSource.getFieldValue(JRXmlDataSource.java:313)
        at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:823)
        at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:787)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1478)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:125)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
        at XmlJasperInterface.report(XmlJasperInterface.java:89)
        at XmlJasperInterface.main(XmlJasperInterface.java:63)
Caused by: java.text.ParseException: Unparseable date: "03/03/1981"
        at java.text.DateFormat.parse(DateFormat.java:337)
        at net.sf.jasperreports.engine.util.JRDateLocaleConverter.parse(JRDateLocaleConverter.java:84)
        at org.apache.commons.beanutils.locale.BaseLocaleConverter.convert(BaseLocaleConverter.java:232)
        ... 13 more

Я не уверен, что вызвало это. Мы также недавно обновили отчеты Jasper, но я помню, что после обновления он работал.

Я нашел сообщение в блоге под названием BeanUtils, Digester и преобразование типов который указывает на добавление этих строк:

String pattern = "MM/dd/yyyy";
Locale locale = Locale.getDefault();
DateLocaleConverter converter = new DateLocaleConverter(locale, pattern);
converter.setLenient(true);
ConvertUtils.register(converter, java.util.Date.class);

но они ничего не изменили. Я все еще получаю ту же ошибку.

Строка, которая вызывает ошибку, такова:

jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JRXmlDataSource(System.in, selectCriteria));

Спасибо.

Обновление: при понижении версии Jasper Reports до версии 1.1.0 он снова заработал, поэтому, скорее всего, его сломало обновление.


person pupeno    schedule 15.09.2010    source источник
comment
Какие у вас настройки локали? Для шаблона MM/dd/yyyy я бы использовал Locale.US вместо Locale.getDefault, который дает вам текущую локаль ОС.   -  person Paweł Dyda    schedule 15.09.2010
comment
Павел, моя локаль de_CH, но даже запись даты как d.m.yyyy не помогла. Я пробовал все основные форматы даты, и ни один из них не работал.   -  person pupeno    schedule 16.09.2010


Ответы (1)


Вам нужно будет установить шаблон даты в вашем источнике данных, например:

JRXmlDataSource datasource = new JRXmlDataSource(....);
datasource.setDatePattern("MM/dd/yyyy");
person Pascal    schedule 15.09.2010
comment
Можете ли вы объяснить некоторые причины вашего ответа? Дата неправильно интерпретируется как строка, пока он не создаст для нее источник данных? - person OrwellHindenberg; 10.07.2014