Rob M
Rob M

Reputation: 1031

500 error in cfc

I am getting a 500 error when I try calling a method in a cfc. Since I am not getting any kind of debugging information, I am struggling to figure out what is going on. I have looked at the logs, and nothing is there that would indicate what is going on. I am using jquery .ajax to call the cfc using POST

Here is the jquery:

$("#edit_button").click(function(){
    if(theArray.length > 0){
        theJson = JSON.stringify(theArray);
    }
    $.ajax({type:"POST",
            url: "/CFCs/fund_profile.cfc?method=updateProfile",
            data:theJson,
            dataType:"json",
            success:(function(response){
                var content = ''
                response = JSON.parse(response);    
                alert("the response is" + response);
        });
    });     
});

The the method in the cfc is pretty basic right now:

<cffuntion name="updateProfile" access="public" returnFormat="json">
    <cfargument name="theJson">
     <cfif isJson(theJson)>
         <cfset var theArray = deserializeJson(theJson)>
         <cfset var passingJson = serializeJson(theArray)>
     </cfif>
     <cfreturn passingJson>

here is the stack trace:

500

javax.servlet.ServletException
    at coldfusion.xml.rpc.CFCServlet.invoke(CFCServlet.java:154)
    at coldfusion.xml.rpc.CFCServlet.doPost(CFCServlet.java:289)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
    at jrun.servlet.FilterChain.service(FilterChain.java:101)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
    at jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
    at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

I'm stumped, and without any kind of real debugging information to go on, I'm stuck. Any ideas?

Upvotes: 1

Views: 551

Answers (1)

craig.kaminsky
craig.kaminsky

Reputation: 5598

Your CFC's method's access attribute needs to be remote for Ajax calls (or from something like a Flex app's service). Essentially, without the access set to remote, the method in question is not "available" when that call is made.

Try:

<cffunction name="updateProfile" access="remote" returnFormat="json">
  ...
</cffunction>

Upvotes: 4

Related Questions