Kanban "metaPropertyPath" is null

Hello everyone,

I’m trying to setup a Kanban board to manage part of a billing approvals system. Unfortunately when I try to make the view I constantly get the error:
NullPointerException: Cannot invoke "io.jmix.core.metamodel.model.MetaPropertyPath.getMetaProperties()" because "metaPropertyPath" is null

I’m now beating my head against a rock because I can’t get anything to load, but the data table loads correctly in other list and detail view, so I know the data its self is correct.

Explanation of how I think it should work

I have a view that displays elements from my “billingShifts” table. I should just setup the following view descriptor and it should display the items in the kanban board separated by their values in the column “incompleteStatus” which is an enumeration value of BillingIncompleteStatus.

Here is the view descriptor:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<view xmlns="http://jmix.io/schema/flowui/view" xmlns:kanban="http://jmix.io/schema/kanban/ui"
      title="msg://billingIncompleteKanban.title"
      focusComponent="billingShiftKanban">
    <data readOnly="true">
        <collection id="billingShiftsDc"
                    class="com.company.alirem.entity.BillingShift">
            <fetchPlan extends="_base"/>
            <loader id="billingShiftsDl" readOnly="true">
                <query>
                    <![CDATA[select b from BillingShift b]]>
                </query>
            </loader>
        </collection>
    </data>
    <facets>
        <dataLoadCoordinator auto="true"/>
    </facets>
    <actions>
        <action id="selectAction" type="lookup_select"/>
        <action id="discardAction" type="lookup_discard"/>
    </actions>
    <layout>
        <genericFilter dataLoader="billingShiftsDl"/>
        <kanban:kanban id="billingShiftKanban"
                       dataContainer="billingShiftsDc"
                       width="100%"
                       height="100%" collapsible="true" taskTagsVisible="true">
            <kanban:propertiesMapping id="id"
                                      status="incompleteStatus"
                                      text="a2Notes" tags="a2Notes"/>
            <kanban:columns columnsEnum="com.company.alirem.entity.BillingIncompleteStatus"/>
        </kanban:kanban>


    </layout>
</view>

Here is the view controller:

package com.company.alirem.view.billingshift;

import com.company.alirem.entity.BillingShift;
import com.company.alirem.view.main.MainView;
import com.vaadin.flow.router.Route;
import io.jmix.flowui.model.CollectionContainer;
import io.jmix.flowui.view.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@Route(value = "billignIncompleteKanban", layout = MainView.class)
@ViewController(id = "BillingIncomplete.list")
@ViewDescriptor(path = "billing-incomplete.xml")
@DialogMode(width = "64em")
public class BillingIncompleteKanban extends StandardListView<BillingShift> {
}

I’ve read through the documentation several times now, and nothing is working and this error doesn’t showup anywhere else with solutions I can find.

Thank you for any help,
Oran

Hi

Could you please provide a small test project with the entity you are trying to display on the Kanban board?
It would also be useful to see the full stacktrace of the exception and the code of your entity.

Regards,
Dmitriy

This is the complete trace

java.lang.NullPointerException: Cannot invoke "io.jmix.core.metamodel.model.MetaPropertyPath.getMetaProperties()" because "metaPropertyPath" is null
	at io.jmix.security.impl.constraint.SecureOperationsImpl.isEntityAttrUpdatePermitted(SecureOperationsImpl.java:88)
	at io.jmix.security.constraint.EntityAttributeConstraint.applyTo(EntityAttributeConstraint.java:53)
	at io.jmix.security.constraint.EntityAttributeConstraint.applyTo(EntityAttributeConstraint.java:29)
	at io.jmix.core.AccessManager.lambda$applyConstraints$2(AccessManager.java:77)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at io.jmix.core.AccessManager.applyConstraints(AccessManager.java:76)
	at io.jmix.core.AccessManager.applyRegisteredConstraints(AccessManager.java:86)
	at io.jmix.kanbanflowui.component.Kanban.isPropertyModifiableBySecurity(Kanban.java:637)
	at io.jmix.kanbanflowui.component.Kanban.isPropertyModifiableBySecurity(Kanban.java:627)
	at io.jmix.kanbanflowui.component.Kanban.isTaskMovingAllowedBySecurity(Kanban.java:619)
	at io.jmix.kanbanflowui.component.Kanban.refreshSecurityState(Kanban.java:604)
	at io.jmix.kanbanflowui.component.Kanban.setItems(Kanban.java:251)
	at io.jmix.kanbanflowui.component.loader.KanbanLoader.loadData(KanbanLoader.java:190)
	at io.jmix.kanbanflowui.component.loader.KanbanLoader.loadComponent(KanbanLoader.java:91)
	at io.jmix.flowui.xml.layout.loader.container.AbstractContainerLoader.loadSubComponents(AbstractContainerLoader.java:37)
	at io.jmix.flowui.xml.layout.loader.container.AbstractContainerLoader.loadSubComponentsAndExpand(AbstractContainerLoader.java:74)
	at io.jmix.flowui.xml.layout.loader.ViewLoader.loadComponent(ViewLoader.java:75)
	at io.jmix.flowui.sys.ViewSupport.loadWindowFromXml(ViewSupport.java:450)
	at io.jmix.flowui.sys.ViewSupport.initView(ViewSupport.java:123)
	at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.init(JmixSpringInstantiator.java:65)
	at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.getOrCreate(JmixSpringInstantiator.java:58)
	at com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:170)
	at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.createRouteTarget(JmixSpringInstantiator.java:49)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:148)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:147)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:502)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:483)
	at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:227)
	at com.vaadin.flow.component.internal.JavaScriptNavigationStateRenderer.handle(JavaScriptNavigationStateRenderer.java:78)
	at com.vaadin.flow.component.UI.handleNavigation(UI.java:2005)
	at com.vaadin.flow.component.UI.renderViewForRoute(UI.java:1968)
	at com.vaadin.flow.component.UI.lambda$browserNavigate$3bdbbbb5$1(UI.java:1829)
	at com.vaadin.flow.component.UI.browserNavigate(UI.java:1838)
	at com.vaadin.flow.component.ComponentEventBus.fireEventForListener(ComponentEventBus.java:239)
	at com.vaadin.flow.component.ComponentEventBus.handleDomEvent(ComponentEventBus.java:488)
	at com.vaadin.flow.component.ComponentEventBus.lambda$addDomTrigger$dd1b7957$1(ComponentEventBus.java:298)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.lambda$fireEvent$2(ElementListenerMap.java:473)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at com.vaadin.flow.internal.nodefeature.ElementListenerMap.fireEvent(ElementListenerMap.java:473)
	at com.vaadin.flow.server.communication.rpc.EventRpcHandler.handleNode(EventRpcHandler.java:62)
	at com.vaadin.flow.server.communication.rpc.AbstractRpcInvocationHandler.handle(AbstractRpcInvocationHandler.java:73)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocationData(ServerRpcHandler.java:475)
	at com.vaadin.flow.server.communication.ServerRpcHandler.lambda$handleInvocations$5(ServerRpcHandler.java:456)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:456)
	at com.vaadin.flow.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:324)
	at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:114)
	at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1584)
	at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:398)
	at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:106)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:632)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:408)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:303)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:267)
	at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:142)
	at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:178)
	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:547)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at io.jmix.core.impl.logging.LogMdcFilter.doFilterInternal(LogMdcFilter.java:28)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
	at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365)
	at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:110)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:101)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:151)
	at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:129)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
	at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
	at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:195)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
	at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:230)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:384)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
	at java.base/java.lang.Thread.run(Thread.java:1583)

This is the download link for a small test project, it produced the same error in the demo project.

Thank you,
Oran

Thank you for the information and report provided.

This is a bug, I have created an issue to fix it: Kanban loads data before properties mapping · Issue #4165 · jmix-framework/jmix · GitHub

As a temporary workaround, you can override the KanbanLoader class. You can see an example of overriding in the attached project:
kanbanTest.zip (1.5 MB)

Best regards,
Dmitriy

1 Like

Thank you so much, I was going crazy trying to figure this one out.

Anyone else running into this, you can download the test file above, but I’ll summarize the step by step for this bug resolution here:

  1. Create the directory “hotfix” in your src/main/java/com/company/“project_name” directory.
  2. In that hotfix directory create the document FixedKanbanLoader.java. It will need to look like this (ensure you update to add the “package com.company.‘project_name’.hotfix” at the start of the file)
import io.jmix.kanbanflowui.component.loader.KanbanLoader;
import io.jmix.kanbanflowui.kit.component.JmixKanban;

public class FixedKanbanLoader extends KanbanLoader {

    @Override
    public void loadComponent() {
        loadBoolean(element, "columnReorderingAllowed", resultComponent::setColumnReorderingAllowed);
        loadBoolean(element, "columnHidingAllowed", resultComponent::setColumnHidingAllowed);

        loadBoolean(element, "dragAllowed", resultComponent::setDragAllowed);
        loadBoolean(element, "dropAllowed", resultComponent::setDropAllowed);
        loadBoolean(element, "dropPlaceholderAllowed", resultComponent::setDropPlaceholderAllowed);

        loadBoolean(element, "applyColumnColorToTasks", resultComponent::setApplyColumnColorToTasksEnabled);
        loadBoolean(element, "autoColumnHeightEnabled", resultComponent::setAutoColumnHeightEnabled);

        loadBoolean(element, "collapsible", resultComponent::setCollapsible);

        loadInteger(element, "columnsWidth", resultComponent::setColumnsWidth);
        loadBoolean(element, "columnColorEntireSurfaceEnabled", resultComponent::setColumnColorEntireSurfaceEnabled);
        loadBoolean(element, "columnFooterVisible", resultComponent::setColumnFooterVisible);
        loadBoolean(element, "columnActionsEnabled", resultComponent::setColumnActionsEnabled);
        loadBoolean(element, "columnSummaryEnabled", resultComponent::setColumnSummaryEnabled);

        loadEnum(element, JmixKanban.HierarchyMode.class, "hierarchyMode", resultComponent::setHierarchyMode);

        loadInteger(element, "swimlanesFrom", resultComponent::setSwimlanesFrom);
        loadInteger(element, "swimlanesTo", resultComponent::setSwimlanesTo);

        loadBoolean(element, "taskDueDateVisible", resultComponent::setTaskDueDateVisible);
        loadBoolean(element, "taskUserAvatarVisible", resultComponent::setTaskUserAvatarVisible);
        loadEnum(element, JmixKanban.TaskPosition.class, "taskPosition", resultComponent::setTaskPosition);
        loadBoolean(element, "taskPriorityVisible", resultComponent::setTaskPriorityVisible);
        loadBoolean(element, "taskProgressVisible", resultComponent::setTaskProgressVisible);
        loadBoolean(element, "taskColorEntireSurfaceEnabled", resultComponent::setTaskColorEntireSurfaceEnabled);
        loadBoolean(element, "taskTagsVisible", resultComponent::setTaskTagsVisible);
        loadBoolean(element, "autoSave", this::initAutoSave);

        loadJsFunction(element, "columnHeaderRendererFunction", resultComponent::setColumnHeaderRendererFunction);
        loadJsFunction(element, "columnFooterRendererFunction", resultComponent::setColumnFooterRendererFunction);
        loadJsFunction(element, "taskRendererFunction", resultComponent::setTaskRendererFunction);

        componentLoader().loadSizeAttributes(resultComponent, element);
        componentLoader().loadEnabled(resultComponent, element);
        componentLoader().loadClassNames(resultComponent, element);

        loadColumns();
        loadSwimlanes();
        loadPropertiesMapping();
        loadData();
        loadActions();
    }
}
  1. In src/main/java/com/company/“project_name”/ directory open the document with your “project_name” and add the following @Bean to the end of this file so it will use the new Kanban loader you just defined, ensure to add your project name:
    @Bean
    public ComponentRegistration fixedKanban() {
        return ComponentRegistrationBuilder.create(Kanban.class)
                .withComponentLoader("kanban", com.company."project_name".hotfix.FixedKanbanLoader.class)
                .build();
    }

I can confirm this did resolve the issues.

Thank you,
Oran