cuba icon indicating copy to clipboard operation
cuba copied to clipboard

NPE in the framework when opening screen with malformed loader condition

Open alexbudarov opened this issue 5 years ago • 0 comments

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)

alexbudarov avatar Jan 22 '21 09:01 alexbudarov