Cannot save presentation on grouped dynamic attribute

Hi,

When using dynamic attributes within browse screens, all works fine until the user wants to save a presentation that has a grouping on such a dynamic attribute.

Note that the grouping itself works fine, only when saving the presentation for reuse later on, things go wrong:

08:57:33.196 ERROR com.haulmont.cuba.web.log.AppLog - Exception in com.haulmont.cuba.web.toolkit.ui.CubaButton:
com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
        at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:160)
        at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:119)
        at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:444)
        at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:409)
        at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
        at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1435)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:361)
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:300)
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:191)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
        at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
        at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException: null
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158)
        ... 38 common frames omitted
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in com.haulmont.cuba.web.gui.components.presentations.PresentationEditor$$Lambda$314/818226350 failed.
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
        at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1037)
        at com.vaadin.ui.Button.fireClick(Button.java:377)
        at com.haulmont.cuba.web.toolkit.ui.CubaButton.fireClick(CubaButton.java:54)
        at com.vaadin.ui.Button$1.click(Button.java:54)
        ... 43 common frames omitted
Caused by: com.vaadin.event.ListenerMethod$MethodException: Invocation of method windowClose in com.haulmont.cuba.web.gui.components.presentations.PresentationEditor$$Lambda$316/1612917445 failed.
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:200)
        at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:163)
        at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1037)
        at com.vaadin.ui.Window.fireClose(Window.java:448)
        at com.vaadin.ui.UI.removeWindow(UI.java:578)
        at com.vaadin.ui.Window.close(Window.java:260)
        at com.haulmont.cuba.web.toolkit.ui.CubaWindow.close(CubaWindow.java:194)
        at com.haulmont.cuba.web.gui.components.presentations.PresentationEditor.lambda$initLayout$61446b05$1(PresentationEditor.java:124)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
        ... 49 common frames omitted
Caused by: java.lang.NullPointerException: null
        at com.haulmont.cuba.gui.data.impl.GroupDelegate.getValueByProperty(GroupDelegate.java:275)
        at com.haulmont.cuba.gui.data.impl.GroupDelegate.groupItems(GroupDelegate.java:134)
        at com.haulmont.cuba.gui.data.impl.GroupDelegate.doGroup(GroupDelegate.java:120)
        at com.haulmont.cuba.gui.data.impl.GroupDelegate.groupBy(GroupDelegate.java:77)
        at com.haulmont.cuba.gui.data.impl.GroupDatasourceImpl.groupBy(GroupDatasourceImpl.java:41)
        at com.haulmont.cuba.web.gui.components.WebGroupTable$GroupTableDsWrapper.doGroup(WebGroupTable.java:405)
        at com.haulmont.cuba.web.gui.components.WebGroupTable$GroupTableDsWrapper.groupBy(WebGroupTable.java:399)
        at com.haulmont.cuba.web.toolkit.data.util.GroupTableContainerWrapper.groupBy(GroupTableContainerWrapper.java:47)
        at com.haulmont.cuba.web.toolkit.ui.CubaGroupTable.groupBy(CubaGroupTable.java:417)
        at com.haulmont.cuba.web.gui.components.WebGroupTable$1.groupBy(WebGroupTable.java:85)
        at com.haulmont.cuba.web.gui.components.WebGroupTable.groupBy(WebGroupTable.java:191)
        at com.haulmont.cuba.web.gui.components.WebGroupTable.applyColumnSettings(WebGroupTable.java:151)
        at com.haulmont.cuba.web.gui.components.WebAbstractTable.applySettings(WebAbstractTable.java:1415)
        at com.haulmont.cuba.web.gui.components.WebAbstractTable.applyPresentation(WebAbstractTable.java:2616)
        at com.haulmont.cuba.web.gui.components.WebAbstractTable.applyPresentation(WebAbstractTable.java:2594)
        at com.haulmont.cuba.web.gui.components.presentations.PresentationEditor.lambda$commit$23fb4817$1(PresentationEditor.java:195)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
        ... 62 common frames omitted
08:57:33.218 ERROR com.haulmont.cuba.web.log.AppLog - Exception:
java.lang.RuntimeException: Push failed
        at com.vaadin.server.communication.AtmospherePushConnection.push(AtmospherePushConnection.java:171)
        at com.vaadin.server.communication.AtmospherePushConnection.push(AtmospherePushConnection.java:146)
        at com.vaadin.ui.UI.push(UI.java:1562)
        at com.vaadin.server.VaadinSession.unlock(VaadinSession.java:1002)
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:43)
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1435)
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:361)
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:300)
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:191)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
        at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
        at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: null
        at com.vaadin.ui.Table.findNumRowsToPaint(Table.java:3826)
        at com.vaadin.ui.Table.doPaintContent(Table.java:3324)
        at com.vaadin.ui.Table.paintContent(Table.java:3310)
        at com.haulmont.cuba.web.toolkit.ui.CubaTable.paintContent(CubaTable.java:828)
        at com.haulmont.cuba.web.toolkit.ui.CubaGroupTable.paintContent(CubaGroupTable.java:68)
        at com.vaadin.server.LegacyPaint.paint(LegacyPaint.java:65)
        at com.vaadin.server.communication.LegacyUidlWriter.write(LegacyUidlWriter.java:82)
        at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:131)
        at com.vaadin.server.communication.AtmospherePushConnection.push(AtmospherePushConnection.java:168)
        ... 36 common frames omitted

The user is then logged out. After logging in once more, the presentation seems to be saved but selecting it will cause the error to appear once more.

The presentations’ content (in XML) is shown below:

<?xml version="1.0" encoding="UTF-8"?>
<presentation textSelection="false"><columns><columns id="+EngineeringtechEngineer" visible="true"/><columns id="_actions" width="175" visible="true"/><columns id="name" width="400" visible="true"/><columns id="description" visible="false"/><columns id="owner" visible="true"/><columns id="availability" visible="false"/><columns id="confidentiality" visible="false"/><columns id="integrity" visible="false"/><columns id="status" visible="true"/><columns id="sysType" visible="true"/><columns id="inUseSince" visible="false"/><columns id="department" visible="false"/></columns><groupProperties><property id="+EngineeringtechEngineer"/></groupProperties></presentation>

This is an example but is consistent over different entity types.

I do consider this a bug of the platform, correct?

Hello, @b.tel

Yes, it is a bug. I’ve created a ticket about it: YouTrack.

Regards,
Daniil.