Здравствуйте!
После обновления Jmix до версии 2.2.1 вылетает ошибка:
Нет идей как с этим бороться. Может кто-то уже столкнулся с данной проблемой. Помогите, пожалуйста, разобраться.
Здравствуйте,
Не удалось воспроизвести проблему, попробовал на чистом и мигрированном с 2.1.x проекте.
Возможно проблема в build
файлах. Попробуйте вызвать gradle-команды:
gradle clean vaadinClean
С Уважением,
Никита
Спасибо, попробовали. Та же ошибка при формировании отчёта
Данная проблема у вас воспроизводится на новом чистом проекте?
Если есть возможность, пришлите пожалуйста демо-проект с отчётом, в котором воспроизводиться данная проблема.
С Уважением,
Никита
Спасибо за проект, отловил проблему. Завел тикет, в ближайшем багафикс релизе исправим.
На текущий момент могу предложить следующий workaround:
Необходимо создать спринг бин CustomDocxFormatter
:
CustomDocxFormatter.class
@Component("report_CustomDocxFormatter")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class CustomDocxFormatter extends DocxFormatter {
public CustomDocxFormatter(FormatterFactoryInput formatterFactoryInput) {
super(formatterFactoryInput);
}
}
И переопределить фабрику следующим образом:
CustomJmixFormatterFactory.class
public class CustomJmixFormatterFactory extends JmixFormatterFactory {
public CustomJmixFormatterFactory() {
super();
FormatterCreator ftlCreator = factoryInput -> {
HtmlFormatter htmlFormatter = beanFactory.getBean(JmixHtmlFormatter.class, factoryInput);
htmlFormatter.setDefaultFormatProvider(defaultFormatProvider);
htmlFormatter.setScripting(scripting);
return htmlFormatter;
};
formattersMap.put("ftl", ftlCreator);
formattersMap.put("html", ftlCreator);
FormatterCreator docxCreator = factoryInput -> {
DocxFormatter docxFormatter = beanFactory.getBean(CustomDocxFormatter.class, factoryInput);
docxFormatter.setDefaultFormatProvider(defaultFormatProvider);
if (useOfficeForDocumentConversion) {
docxFormatter.setDocumentConverter(documentConverter);
}
docxFormatter.setHtmlImportProcessor(htmlImportProcessor);
docxFormatter.setScripting(scripting);
return docxFormatter;
};
formattersMap.put("docx", docxCreator);
formattersMap.put("chart", factoryInput -> beanFactory.getBean(ChartFormatter.class, factoryInput));
formattersMap.put("pivot", factoryInput -> beanFactory.getBean(PivotTableFormatter.class, factoryInput));
FormatterCreator xlsxCreator = factoryInput -> {
XlsxFormatter xlsxFormatter = beanFactory.getBean(JmixXlsxFormatter.class, factoryInput);
xlsxFormatter.setDefaultFormatProvider(defaultFormatProvider);
xlsxFormatter.setDocumentConverter(documentConverter);
xlsxFormatter.setScripting(scripting);
xlsxFormatter.setFormulasPostProcessingEvaluationEnabled(reportsProperties.isFormulasPostProcessingEvaluationEnabled());
return xlsxFormatter;
};
formattersMap.put("xlsx", xlsxCreator);
formattersMap.put("table", factoryInput -> beanFactory.getBean(JmixTableFormatter.class, factoryInput));
}
}
JmixFormatterFactory.class
@Primary
@Bean("report_CustomFormatterFactory")
public JmixFormatterFactory formatterFactory(JmixInlinersProvider inlinersProvider,
JmixFieldFormatProvider fieldFormatProvider,
Scripting scripting,
JmixOfficeIntegration officeIntegration) {
CustomJmixFormatterFactory formatterFactory = new CustomJmixFormatterFactory();
formatterFactory.setUseOfficeForDocumentConversion(reportsProperties.isUseOfficeForDocumentConversion());
formatterFactory.setInlinersProvider(inlinersProvider);
formatterFactory.setDefaultFormatProvider(fieldFormatProvider);
formatterFactory.setOfficeIntegration(officeIntegration);
formatterFactory.setScripting(scripting);
return formatterFactory;
}
Прикладываю ваш демо проект с исправление:
demo.zip (110.7 КБ)
С Уважением,
Никита
Спасибо и Вам! Ждём обновления