cuba
cuba copied to clipboard
NPE in the framework when opening screen with malformed loader condition
Environment
- Platform version: 7.2.11
Description of the bug or enhancement
Project: attached dlq.zip
I have two screens:
- dashboard.xml - with table and Add action
- my-user-lookup.xml where I try to exclude already added items but create incorrect condition:
<loader id="usersDl">
<query>
<![CDATA[select e from sec$User e order by e.name desc]]>
<condition>
<c:jpql>
e.id not in :addedIds
<!-- instead of <c:where>e.id not in :addedIds</c:where> -->
</c:jpql>
</condition>
</query>
</loader>
When the screen is opened, NPE is throwns inside of CUBA. Hard to understand what's wrong.
Click to expand
13:21:03.860 ERROR c.h.cuba.core.sys.ServiceInterceptor - Exception:
java.lang.NullPointerException: null
at com.haulmont.cuba.core.sys.jpql.transform.QueryTransformerAstBased.replaceEntityPlaceholder(QueryTransformerAstBased.java:287) ~[cuba-global-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.sys.jpql.transform.QueryTransformerAstBased.addWhere(QueryTransformerAstBased.java:109) ~[cuba-global-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.global.queryconditions.ConditionJpqlGenerator.processQuery(ConditionJpqlGenerator.java:38) ~[cuba-global-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.JpqlQueryBuilder.applyFiltering(JpqlQueryBuilder.java:230) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.JpqlQueryBuilder.buildResultQuery(JpqlQueryBuilder.java:212) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.JpqlQueryBuilder.getResultQueryString(JpqlQueryBuilder.java:148) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.JpqlQueryBuilder.getQuery(JpqlQueryBuilder.java:161) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.RdbmsStore.createQuery(RdbmsStore.java:773) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.RdbmsStore.loadList(RdbmsStore.java:240) ~[cuba-core-7.2.11.jar:7.2.11]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_275]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_275]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.sun.proxy.$Proxy320.loadList(Unknown Source) ~[na:na]
at com.haulmont.cuba.core.app.DataManagerBean.loadList(DataManagerBean.java:78) ~[cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.core.app.DataServiceBean.loadList(DataServiceBean.java:54) ~[cuba-core-7.2.11.jar:7.2.11]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_275]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_275]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:90) ~[cuba-core-7.2.11.jar:7.2.11]
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) [spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.sun.proxy.$Proxy120.loadList(Unknown Source) [na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_275]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_275]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
at com.haulmont.cuba.core.sys.remoting.LocalServiceInvokerImpl.invoke(LocalServiceInvokerImpl.java:94) [cuba-core-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:159) [cuba-web-7.2.11.jar:7.2.11]
at com.sun.proxy.$Proxy237.loadList(Unknown Source) [na:na]
at com.haulmont.cuba.client.sys.DataManagerClientImpl.loadList(DataManagerClientImpl.java:57) [cuba-client-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.model.impl.CollectionLoaderImpl.load(CollectionLoaderImpl.java:107) [cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.gui.components.dataloadcoordinator.OnFrameOwnerEventLoadTrigger.load(OnFrameOwnerEventLoadTrigger.java:48) [cuba-web-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.gui.components.dataloadcoordinator.OnFrameOwnerEventLoadTrigger.lambda$new$0(OnFrameOwnerEventLoadTrigger.java:39) [cuba-web-7.2.11.jar:7.2.11]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.screen.Screen.fireEvent(Screen.java:128) ~[cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.screen.UiControllerUtils.fireEvent(UiControllerUtils.java:60) ~[cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.sys.WebScreens.show(WebScreens.java:445) ~[cuba-web-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.screen.Screen.show(Screen.java:309) ~[cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.actions.list.AddAction.execute(AddAction.java:286) ~[cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.gui.actions.list.AddAction.actionPerform(AddAction.java:254) ~[cuba-gui-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67) ~[cuba-web-7.2.11.jar:7.2.11]
at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76) ~[cuba-web-widgets-7.2.11.jar:na]
at com.vaadin.ui.Button$1.click(Button.java:57) ~[vaadin-server-8.9.2-17-cuba.jar:8.9.2-17-cuba]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_275]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_275]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_275]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_275]
Expected behavior: DevelopmentException during loading of the screen. Maybe also improve XSD to highlight invalid tag (c:jpql)