enonic / xp

Enonic XP
https://enonic.com
GNU General Public License v3.0
201 stars 34 forks source link

Using request filters next() will suffocate actual server errors #8417

Closed Bellfalasch closed 3 years ago

Bellfalasch commented 3 years ago

When writing a request filter, using mappings in site.xml, I get a very frustrating behaviour when server errors happens elsewhere in my code. The next() function will fail and not report the actual error, but instead tell me there's an error in my filter.

site.xml

  <mappings>
    <mapping filter="/site/filter.js" order="20">
      <pattern>/.*</pattern>
    </mapping>
  </mappings>

/site/filter.js

exports.filter = function (req, next) {
  // if this, if that ... 
  return next(req);
}

If I now generate a server error, for instance by simply deleting a part used on a page and then visit this page, the filter will execute (as it should) but it will also crash on next(req) and report an error in itself instead: "Error executing filter script: com.myapp.theme:/site/filter.js".

It would be very helpful if an error in the next request didn't crash the next()-function, or if the actual error could be reported, or some other smart way of getting out of this situation, like a way to exit a request handler if errors occur.

Bellfalasch commented 3 years ago

Full error message and stacktrace:

500 Internal Server Error
Error executing filter script: com.myapp.theme:/site/filter.js (com.enonic.xp.resource.ResourceProblemException)

1com.enonic.xp.web.impl.exception.ExceptionMapperImpl.map(ExceptionMapperImpl.java:33)

2com.enonic.xp.portal.handler.BasePortalHandler.handleError(BasePortalHandler.java:60)

3com.enonic.xp.portal.handler.BasePortalHandler.doHandle(BasePortalHandler.java:52)

4com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)

5com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)

6com.enonic.xp.web.impl.trace.TraceWebFilter.doHandle(TraceWebFilter.java:38)

7com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)

8com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)

9com.enonic.xp.web.impl.handler.WebDispatcherImpl.dispatch(WebDispatcherImpl.java:44)

10com.enonic.xp.web.impl.handler.WebDispatcherServlet.doHandle(WebDispatcherServlet.java:142)

11com.enonic.xp.web.impl.handler.WebDispatcherServlet.service(WebDispatcherServlet.java:70)

12javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

13com.enonic.xp.web.impl.dispatch.mapping.ServletDefinitionImpl.service(ServletDefinitionImpl.java:40)

14com.enonic.xp.web.impl.dispatch.pipeline.ServletPipelineImpl.service(ServletPipelineImpl.java:40)

15com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:45)

16com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

17com.enonic.xp.portal.impl.idprovider.IdProviderFilter.doHandle(IdProviderFilter.java:45)

18com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)

19com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

20com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

21com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

22com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

23com.enonic.xp.web.impl.auth.BasicAuthFilter.doHandle(BasicAuthFilter.java:34)

24com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)

25com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

26com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

27com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

28com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

29com.enonic.xp.web.impl.context.ContextFilter.lambda$doHandle$0(ContextFilter.java:33)

30com.enonic.xp.context.ContextImpl.callWith(ContextImpl.java:102)

31com.enonic.xp.web.impl.context.ContextFilter.doHandle(ContextFilter.java:32)

32com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)

33com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

34com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

35com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

36com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

37com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:26)

38com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

39com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

40com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

41com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

42com.enonic.xp.web.impl.dos.DosFilterWrapper.doFilter(DosFilterWrapper.java:65)

43com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

44com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

45com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

46com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:26)

47com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

48com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

49com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

50com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

51com.enonic.xp.web.impl.dispatch.pipeline.FilterPipelineImpl.filter(FilterPipelineImpl.java:39)

52com.enonic.xp.web.impl.dispatch.DispatchServletImpl.service(DispatchServletImpl.java:52)

53javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

54org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)

55org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)

56org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

57org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:625)

58org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

59org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)

60org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)

61org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)

62org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)

63org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)

64org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)

65org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)

66org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)

67org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)

68org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

69org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:219)

70org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:78)

71com.enonic.xp.web.vhost.impl.VirtualHostFilter.doHandle(VirtualHostFilter.java:53)

72com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)

73com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

74com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

75com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

76com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

77com.enonic.xp.web.impl.dos.DosFilterWrapper.doFilter(DosFilterWrapper.java:65)

78com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

79com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

80com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

81org.eclipse.jetty.servlets.HeaderFilter.doFilter(HeaderFilter.java:117)

82com.enonic.xp.web.impl.header.HeaderFilterWrapper.doHandle(HeaderFilterWrapper.java:51)

83com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)

84com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)

85com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)

86com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)

87com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)

88com.enonic.xp.web.impl.dispatch.pipeline.FilterPipelineImpl.filter(FilterPipelineImpl.java:39)

89com.enonic.xp.web.impl.dispatch.DispatchServletImpl.service(DispatchServletImpl.java:52)

90javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

91org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)

92org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)

93org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

94org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:767)

95org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

96org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)

97org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)

98org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)

99org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)

100org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)

101org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)

102org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)

103org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)

104org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)

105org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

106org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)

107org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

108com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:249)

109org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

110org.eclipse.jetty.server.Server.handle(Server.java:501)

111org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)

112org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)

113org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)

114org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)

115org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)

116org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

117org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)

118org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)

119org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)

120org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)

121org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)

122org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)

123org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)

124org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)

125java.base/java.lang.Thread.run(Thread.java:834)
Bellfalasch commented 3 years ago

Also, if the request is made for a 404 resource, next(req) will just return the closest matching content. So a request for /page-exists/missing-page should give us the 404 (and trigger any handle404 in error.js) but instead returns the page for /page-exists/ (meaning it is impossible to get to the 404 page). Maybe I should open a new issue for that particular behaviour?

Bellfalasch commented 3 years ago

Any status on this one?

anatol-sialitski commented 3 years ago

Hi @Bellfalasch! I tried to reproduce the issue, but can not to get the same stack trace. I got WebException, but in my case that is as expected result:

17:51:02.013 ERROR c.e.x.p.i.e.ExceptionRendererImpl - Error executing filter script: com.enonic.app.features:/site/mappings/filter2.js
com.enonic.xp.web.WebException: Error executing filter script: com.enonic.app.features:/site/mappings/filter2.js
    at com.enonic.xp.web.impl.exception.ExceptionMapperImpl.map(ExceptionMapperImpl.java:33)
    at com.enonic.xp.portal.handler.BasePortalHandler.handleError(BasePortalHandler.java:60)
    at com.enonic.xp.portal.handler.BasePortalHandler.doHandle(BasePortalHandler.java:52)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.impl.trace.TraceWebFilter.doHandle(TraceWebFilter.java:38)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.impl.handler.WebDispatcherImpl.dispatch(WebDispatcherImpl.java:44)
    at com.enonic.xp.web.impl.handler.WebDispatcherServlet.doHandle(WebDispatcherServlet.java:142)
    at com.enonic.xp.web.impl.handler.WebDispatcherServlet.service(WebDispatcherServlet.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at com.enonic.xp.web.impl.dispatch.mapping.ServletDefinitionImpl.service(ServletDefinitionImpl.java:40)
    at com.enonic.xp.web.impl.dispatch.pipeline.ServletPipelineImpl.service(ServletPipelineImpl.java:40)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:45)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.app.rewrite.filter.RewriteFilter.doHandle(RewriteFilter.java:67)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.portal.impl.idprovider.IdProviderFilter.doHandle(IdProviderFilter.java:45)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.web.impl.auth.BasicAuthFilter.doHandle(BasicAuthFilter.java:34)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.web.impl.context.ContextFilter.lambda$doHandle$0(ContextFilter.java:33)
    at com.enonic.xp.context.ContextImpl.callWith(ContextImpl.java:102)
    at com.enonic.xp.web.impl.context.ContextFilter.doHandle(ContextFilter.java:32)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.web.vhost.impl.VirtualHostFilter.doHandle(VirtualHostFilter.java:73)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.web.impl.dos.DosFilterWrapper.doFilter(DosFilterWrapper.java:65)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at org.eclipse.jetty.servlets.HeaderFilter.doFilter(HeaderFilter.java:117)
    at com.enonic.xp.web.impl.header.HeaderFilterWrapper.doHandle(HeaderFilterWrapper.java:51)
    at com.enonic.xp.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:31)
    at com.enonic.xp.web.filter.BaseWebFilter.doFilter(BaseWebFilter.java:33)
    at com.enonic.xp.web.impl.dispatch.mapping.FilterDefinitionImpl.doFilter(FilterDefinitionImpl.java:41)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:50)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterChainImpl.doFilter(FilterChainImpl.java:36)
    at com.enonic.xp.web.impl.dispatch.pipeline.FilterPipelineImpl.filter(FilterPipelineImpl.java:39)
    at com.enonic.xp.web.impl.dispatch.DispatchServletImpl.service(DispatchServletImpl.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:767)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1377)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:249)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at org.eclipse.jetty.server.Server.handle(Server.java:501)
    at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
    at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
    at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.enonic.xp.resource.ResourceProblemException: Error executing filter script: com.enonic.app.features:/site/mappings/filter2.js
    at com.enonic.xp.resource.ResourceProblemException$Builder.build(ResourceProblemException.java:131)
    at com.enonic.xp.portal.impl.filter.FilterNextFunctionWrapper.scriptError(FilterNextFunctionWrapper.java:76)
    at com.enonic.xp.portal.impl.filter.FilterNextFunctionWrapper.apply(FilterNextFunctionWrapper.java:65)
    at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$280$73AA$filter2.L:1#filter(com.enonic.app.features:/site/mappings/filter2.js:12)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:659)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:120)
    at com.enonic.xp.script.impl.value.FunctionScriptValue.call(FunctionScriptValue.java:36)
    at com.enonic.xp.script.impl.executor.ScriptExportsImpl.executeMethod(ScriptExportsImpl.java:59)
    at com.enonic.xp.portal.impl.filter.FilterScriptImpl.doExecute(FilterScriptImpl.java:83)
    at com.enonic.xp.portal.impl.filter.FilterScriptImpl.lambda$execute$0(FilterScriptImpl.java:46)
    at com.enonic.xp.trace.Tracer.traceEx(Tracer.java:72)
    at com.enonic.xp.trace.Tracer.traceEx(Tracer.java:104)
    at com.enonic.xp.portal.impl.filter.FilterScriptImpl.execute(FilterScriptImpl.java:46)
    at com.enonic.xp.portal.impl.handler.mapping.MappingFilterHandlerWorker.execute(MappingFilterHandlerWorker.java:51)
    at com.enonic.xp.portal.impl.handler.mapping.MappingHandler.handleFilter(MappingHandler.java:111)
    at com.enonic.xp.portal.impl.handler.mapping.MappingHandler.doHandle(MappingHandler.java:73)
    at com.enonic.xp.portal.impl.handler.mapping.MappingHandler.doHandle(MappingHandler.java:24)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.portal.handler.BasePortalHandler.doHandle(BasePortalHandler.java:46)
    ... 98 common frames omitted
Caused by: com.enonic.xp.resource.ResourceProblemException: ReferenceError: "params" is not defined
    at com.enonic.xp.resource.ResourceProblemException$Builder.build(ResourceProblemException.java:131)
    at com.enonic.xp.script.impl.util.ErrorHelper.doHandleException(ErrorHelper.java:54)
    at com.enonic.xp.script.impl.util.ErrorHelper.handleError(ErrorHelper.java:27)
    at com.enonic.xp.script.impl.value.FunctionScriptValue.call(FunctionScriptValue.java:41)
    at com.enonic.xp.script.impl.executor.ScriptExportsImpl.executeMethod(ScriptExportsImpl.java:59)
    at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.doExecute(ControllerScriptImpl.java:71)
    at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.lambda$execute$0(ControllerScriptImpl.java:36)
    at com.enonic.xp.trace.Tracer.traceEx(Tracer.java:72)
    at com.enonic.xp.trace.Tracer.trace(Tracer.java:51)
    at com.enonic.xp.trace.Tracer.trace(Tracer.java:98)
    at com.enonic.xp.portal.impl.controller.ControllerScriptImpl.execute(ControllerScriptImpl.java:36)
    at com.enonic.xp.portal.impl.rendering.PageRenderer.doRender(PageRenderer.java:49)
    at com.enonic.xp.portal.impl.rendering.PageRenderer.doRender(PageRenderer.java:28)
    at com.enonic.xp.portal.impl.rendering.PostProcessingRenderer.render(PostProcessingRenderer.java:25)
    at com.enonic.xp.portal.impl.rendering.RendererDelegateImpl.lambda$render$1(RendererDelegateImpl.java:40)
    at java.base/java.util.Optional.map(Optional.java:265)
    at com.enonic.xp.portal.impl.rendering.RendererDelegateImpl.render(RendererDelegateImpl.java:40)
    at com.enonic.xp.portal.impl.handler.render.PageHandlerWorker.execute(PageHandlerWorker.java:127)
    at com.enonic.xp.portal.impl.handler.render.PageHandler.doHandle(PageHandler.java:62)
    at com.enonic.xp.portal.impl.handler.render.PageHandler.doHandle(PageHandler.java:22)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:66)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.web.handler.BaseWebHandler.handle(BaseWebHandler.java:75)
    at com.enonic.xp.web.impl.handler.WebHandlerChainImpl.handle(WebHandlerChainImpl.java:30)
    at com.enonic.xp.portal.impl.filter.FilterNextFunctionWrapper.apply(FilterNextFunctionWrapper.java:59)
    ... 119 common frames omitted
Caused by: jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "params" is not defined
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291)
    at jdk.scripting.nashorn/jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1616)
    at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$324$250A$main.L:1#handleGet(com.enonic.app.features:/site/pages/main/main.js:25)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:657)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
    at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527)
    at jdk.scripting.nashorn/jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:120)
    at com.enonic.xp.script.impl.value.FunctionScriptValue.call(FunctionScriptValue.java:36)
    ... 156 common frames omitted

Could you please provide more details how to reproduce it and all stack trace with the error?

Bellfalasch commented 3 years ago

Hi Anatol,

I can also see the error at the very end of the log, also if I open the Page Editor in Content Studio I see the actual error. But in inline mode, in preview mode and live mode the error display is only the one saying my filter failed.

Top of my error is this:

Skjermbilde 2020-11-13 kl  12 54 59

I created a fork of App Corporate Theme and added my filter there - you can clone it and try it. This will break the frontpage's part called "Slider" (by renaming it). The filter will show this message instead of anything else when visiting frontpage.

Skjermbilde 2020-11-13 kl  12 55 07

An ideal situation in my oppinion is to not say the filter or next() failed but instead tell me the real error? Isn't that more useful?

I find this hindering me from debugging in a speedy manner as I need to really digg to see the actual error. Also other developers on the team I need to "train" them on how to find the real error.

Bellfalasch commented 3 years ago

Also if you try a random URL on this website, you will find it impossible to trigger the build in error404 handler. You will see the closest parent content instead. Which is totally not what I expected =) This URL for example doesn't exists, but it will not show the 404-page (unless I deactivate/delete my filter) it will show the news-page. http://localhost:8080/admin/site/preview/default/draft/my-corporation/news/skjfhskdjhf%20kasjhdflkjas%20dhf

anatol-sialitski commented 3 years ago

Also if you try a random URL on this website, you will find it impossible to trigger the build in error404 handler. You will see the closest parent content instead. Which is totally not what I expected =) This URL for example doesn't exists, but it will not show the 404-page (unless I deactivate/delete my filter) it will show the news-page.

That issue out of scope for the current ticket and will be fixed here.

rymsha commented 3 years ago

That issue out of scope for the current ticket and will be fixed here.

After some investigation we decided to create a separate issue #8530