Hello there,
I can’t figure out why exceptions thrown from a remote function accessed via ajax are not handled in the Application.cfc’s onError method. The remote function is part of a component. I am using FW/1 btw.
Thanks in advance
Hello there,
I can’t figure out why exceptions thrown from a remote function accessed via ajax are not handled in the Application.cfc’s onError method. The remote function is part of a component. I am using FW/1 btw.
Thanks in advance
Lucee Version?
5.3.3.62
Here is a minimal example to reproduce the behavior:
ajax.cfc:
<cfcomponent>
<cffunction name="test" access="remote">
<cfthrow message="error">
</cffunction>
</cfcomponent>
assets/custom/js/default.js
dbg = console.log;
function test(){
$.ajax({
url: 'services/ajax.cfc',
type: 'POST',
data: {
method: 'test'
},
success: function(data){
dbg(data);
},
error: function(msg){
dbg(msg);
}
});
}
Application.cfc:
component extends="framework.one"{
function onError(){
writeDump(var=now(),output="c:/temp/err_out.txt");
}
}
layouts/main/default.cfm:
<cfoutput>
<html>
<head>
<script src="assets/libs/jquery/jquery-3.3.1.min.js"></script>
<script src="assets/custom/js/default.js"></script>
</head>
<body>
layout
#body#
</body>
</html>
</cfoutput>
views/main/default.cfm:
<script>
test();
</script>
Remote function is executed, I get a 500 response in browser dev tools. But ‘c:/temp/err_out.txt’ remains the same, thus I conclude that onError is never fired.
what does the stacktrace look like, i.e from the web context logs?
That’s what I get in dev tools in the browser. Not sure if that is what you mean.
The Error Occurred in
C:\www\template_framework_one2\services\ajax.cfc: line 4
2:
3: <cffunction name="test" access="remote">
4: <cfthrow message="error">
5: </cffunction>
6:
I also have logs in ‘lucee-web\logs’ folder, if you need one of those which one?
Also here’s the complete thing in case you need the java stacktrace as well…
Lucee 5.3.3.62 Error (application)
Message error
Stacktrace The Error Occurred in
C:\www\template_framework_one2\services\ajax.cfc: line 4
2:
3: <cffunction name="test" access="remote">
4: <cfthrow message="error">
5: </cffunction>
6:
Java Stacktrace lucee.runtime.exp.CustomTypeException: error
at lucee.runtime.tag.Throw._doStartTag(Throw.java:212)
at lucee.runtime.tag.Throw.doStartTag(Throw.java:201)
at template_framework_one2.services.ajax_cfc$cf$1.udfCall(/template_framework_one2/services/ajax.cfc:4)
at lucee.runtime.type.UDFImpl.implementation(UDFImpl.java:106)
at lucee.runtime.type.UDFImpl._call(UDFImpl.java:342)
at lucee.runtime.type.UDFImpl.callWithNamedValues(UDFImpl.java:205)
at lucee.runtime.ComponentImpl._call(ComponentImpl.java:681)
at lucee.runtime.ComponentImpl._call(ComponentImpl.java:576)
at lucee.runtime.ComponentImpl.callWithNamedValues(ComponentImpl.java:1926)
at lucee.runtime.ComponentSpecificAccess.callWithNamedValues(ComponentSpecificAccess.java:156)
at lucee.runtime.ComponentPageImpl.callWDDX(ComponentPageImpl.java:629)
at lucee.runtime.ComponentPageImpl.call(ComponentPageImpl.java:189)
at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:942)
at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:834)
at lucee.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:216)
at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2409)
at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2399)
at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2374)
at lucee.runtime.engine.Request.exe(Request.java:43)
at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1109)
at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1055)
at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at org.cfmlprojects.regexpathinfofilter.RegexPathInfoFilter.doFilter(RegexPathInfoFilter.java:47)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:64)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:336)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)