Hi,
I oftentimes see the stack trace in a CUBA app that contains the following information for a given random exception that is caused by the UI:
22:12:21.423 ERROR com.haulmont.cuba.web.log.AppLog - Exception in com.haulmont.cuba.web.widgets.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:157) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1578) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) ~[cuba-web-7.2.13.jar:7.2.13]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) ~[cuba-web-7.2.13.jar:7.2.13]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[servlet-api.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) ~[cuba-web-7.2.13.jar:7.2.13]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.38]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[catalina.jar:9.0.38]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.38]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) ~[catalina.jar:9.0.38]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.38]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.38]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-coyote.jar:9.0.38]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.38]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-coyote.jar:9.0.38]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-coyote.jar:9.0.38]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.38]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.38]
at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
... 38 common frames omitted
Caused by: java.lang.RuntimeException: Throw exception: test
at com.haulmont.sample.petclinic.web.screens.visit.VisitBrowse.lambda$onVisitsTableThrowExceptionWithMessage$5(VisitBrowse.java:314) ~[petclinic-web-2.0.jar:na]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.onAfterClose(InputDialog.java:137) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.screen.Screen.fireEvent(Screen.java:128) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.screen.Screen.close(Screen.java:343) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.fireCloseAndResultEvents(InputDialog.java:536) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.lambda$createDialogAction$0(InputDialog.java:526) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.components.actions.BaseAction.actionPerform(BaseAction.java:222) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67) ~[cuba-web-7.2.13.jar:7.2.13]
at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76) ~[cuba-web-widgets-7.2.13.jar:na]
at com.vaadin.ui.Button$1.click(Button.java:57) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
... 43 common frames omitted
Is there any way to change the output to only talk about the actual exception, not the invocation path from the Vaadin button like this:
22:12:21.423 ERROR com.haulmont.cuba.web.log.AppLog - Exception in com.haulmont.cuba.web.widgets.CubaButton:
Caused by: java.lang.RuntimeException: Throw exception: test
at com.haulmont.sample.petclinic.web.screens.visit.VisitBrowse.lambda$onVisitsTableThrowExceptionWithMessage$5(VisitBrowse.java:314) ~[petclinic-web-2.0.jar:na]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.onAfterClose(InputDialog.java:137) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.screen.Screen.fireEvent(Screen.java:128) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.screen.Screen.close(Screen.java:343) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.fireCloseAndResultEvents(InputDialog.java:536) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.app.core.inputdialog.InputDialog.lambda$createDialogAction$0(InputDialog.java:526) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) ~[cuba-global-7.2.13.jar:7.2.13]
at com.haulmont.cuba.gui.components.actions.BaseAction.actionPerform(BaseAction.java:222) ~[cuba-gui-7.2.13.jar:7.2.13]
at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67) ~[cuba-web-7.2.13.jar:7.2.13]
at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76) ~[cuba-web-widgets-7.2.13.jar:na]
at com.vaadin.ui.Button$1.click(Button.java:57) ~[vaadin-server-8.9.2-19-cuba.jar:8.9.2-19-cuba]
... 43 common frames omitted
I have never used this information from vaadin for anything meaningful. It only causes more noise. In particular, I noticed it when using APM solutions (like the Azure one in the below screenshot):
As the grouping by exception does not do anything meaningful anymore.
Perhaps it is possible to catch those exceptions and then somehow throw away the first exception in the chain. Unfortunately, I was not successful while trying it with extending AbstractUiExceptionHandler
. Perhaps someone has already done such a thing, this would be really helpful.
Thanks
Mario