Доброго дня!
Подскажите пожалуйста, на мигрированном проекте, при открытии экрана редактирования сущности, для которой добавлен динамический атрибут типа перечисление, без локализации значений, возникает ошибка.
динамический атрибут
Атрибут типа перечисление, имеет два значения без локализации, расположен на экране редактирования сущности без указания компонента расположения.
стэктрейс ошибки
Caused by: java.lang.NullPointerException: null key in entry: null=2
at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:31) ~[guava-31.1-jre.jar:na]
at com.google.common.collect.SingletonImmutableBiMap.<init>(SingletonImmutableBiMap.java:43) ~[guava-31.1-jre.jar:na]
at com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:81) ~[guava-31.1-jre.jar:na]
at com.google.common.collect.ImmutableBiMap.copyOf(ImmutableBiMap.java:566) ~[guava-31.1-jre.jar:na]
at com.google.common.collect.ImmutableBiMap.copyOf(ImmutableBiMap.java:544) ~[guava-31.1-jre.jar:na]
at io.jmix.ui.component.OptionsField.setOptionsMap(OptionsField.java:75) ~[jmix-ui-1.5.5.jar:na]
at com.haulmont.cuba.gui.dynamicattributes.CubaDynAttrComponentGenerationStrategy.createEnumerationField(CubaDynAttrComponentGenerationStrategy.java:182) ~[jmix-cuba-1.5.5.jar:na]
at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createDatatypeField(DynAttrComponentGenerationStrategy.java:168) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createComponentInternal(DynAttrComponentGenerationStrategy.java:127) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.impl.factory.DynAttrComponentGenerationStrategy.createComponent(DynAttrComponentGenerationStrategy.java:110) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.ui.component.UiComponentsGenerator.generate(UiComponentsGenerator.java:51) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.dynattrui.impl.FormEmbeddingStrategy.addAttributeComponent(FormEmbeddingStrategy.java:79) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.impl.FormEmbeddingStrategy.embed(FormEmbeddingStrategy.java:52) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.impl.BaseEmbeddingStrategy.embed(BaseEmbeddingStrategy.java:79) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.DynAttrEmbeddingStrategies.embedAttributes(DynAttrEmbeddingStrategies.java:38) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.dynattrui.facet.DynAttrFacetProvider.lambda$loadFromXml$0(DynAttrFacetProvider.java:59) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:272) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkThroughComponent(ComponentsHelper.java:279) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.__walkComponents(ComponentsHelper.java:252) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.component.ComponentsHelper.walkComponents(ComponentsHelper.java:247) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.dynattrui.facet.DynAttrFacetProvider.lambda$loadFromXml$1(DynAttrFacetProvider.java:58) ~[jmix-dynattr-ui-1.5.5.jar:na]
at io.jmix.ui.xml.layout.loader.ComponentLoaderContext.executeInitTasks(ComponentLoaderContext.java:167) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.sys.ScreensImpl.createScreen(ScreensImpl.java:227) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.sys.ScreensImpl.create(ScreensImpl.java:133) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.builder.EditorBuilderProcessor.createScreen(EditorBuilderProcessor.java:298) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.builder.EditorBuilderProcessor.buildEditor(EditorBuilderProcessor.java:88) ~[jmix-ui-1.5.5.jar:na]
at io.jmix.ui.builder.EditorClassBuilder.build(EditorClassBuilder.java:169) ~[jmix-ui-1.5.5.jar:na]
Если добавить локализацию значениям перечисления ошибка не возникает, но они отображаются некорректно, с добавлением имени локали(ей).
исправленный динамический атрибут
Атрибут типа перечисление, имеет два значения с локализацией, расположен на экране редактирования сущности без указания компонента расположения.
некорректное отображение динамического атрибута
значения перечисления отображаются в виде "ru/<значение перечисления>=<локализованное значение> en/<значение перечисления>=<локализованное значение>"
Добавлю, что на тестовом проекте ошибка не воспроизводится как при отсутствии локализованных значений перечисления, так и при их добавлении.
Подскажите в какую сторону глядеть? Может проект миграции тянет устаревший аддон? Или что-то в пакетах локализованных сообщений некорректно мигрировало?
PS
На форуме есть две отдельные темы для каждой из наших проблем (экран, отображение). В них коллега @gena утверждает, что решил проблему “удалив все зависимости от cuba, которые стали конфликтовать с jmix” (с). Т.к. у нас проект мигрирован с CUBA, у нас в проекте присутствуют некоторые зависимости из прошлой платформы. Под зависимостями я имею ввиду использование классов из пакетов com.haulmont.cuba
или xmlns:cuba
. Приняв это во внимание, мы экспериментировали на экранах, в дескрипторах и контроллерах которых нет тех самых зависимостей, размещая там динамические атрибуты, но попытки были тщетны.
Так же добавляли отдельно зависимости в build.gradle - не помогло.
implementation 'io.jmix.dynattr:jmix-dynattr-starter'
implementation 'io.jmix.dynattr:jmix-dynattr-ui-starter'
обстановка
Проект мигрирован с CUBA 7.2
Jmix version: 1.5.5
Jmix Studio plugin version: 2.3.2-241
IntelliJ version: IntelliJ IDEA 2024.1 (Community Edition)