4

We have a site in ColdFusion which integrates with a credit card provider using java components.

When calling a particular function on a java object:

<cfset ResponseObject = AgentObject.request(RequestObject, LogObject)>

Where ResponseObject, AgentObject and LogObject are java object created like:

<cftry>

    <cfset AgentObject = createObject("java","com.providername.client.Agent")>

    <cfcatch type="any">
        Do something.
    </cfcatch>
</cftry>

The following is outputted on the page and execution is halted.

<head>
<title>JRun Servlet Error</title>
</head>
<h1>500 Transaction fails verification<br>
    BadRequest: Request fails verification checks<br>
    BadCardNumber: Card length was 16, but we were expecting 0<br>
</h1>
<body>
Transaction fails verification<br>
BadRequest: Request fails verification checks<br>
BadCardNumber: Card length was 16, but we were expecting 0<br>
</body>

The error is expected (we're checking card details), but I don't seem to be able to catch it. A cftry and cfcatch has no effect, so I'm totally at a loss as to how I can handle this error and continue execution.

Can anyone help?

Cheers,

Tom

Edit - additional error information

I thought it may also be useful to post this stack trace. It's not accessible via Coldfusion, but instead is logged to a file as part of LogObject above presumably in the Java code:

    com.providername.client.errors.VerifyErrorReport: Transaction fails verification
    com.providername.client.errors.BadRequest: Request fails verification checks
        com.providername.client.errors.BadCardNumber: Card length was 16, but we were expecting 0
            at com.providername.util.CardInfo.verifyCardNumber(CardInfo.java:412)
            at com.providername.util.CardInfo.validateCardInfo(CardInfo.java:789)
        at com.providername.util.CardInfo.validateCardInfo(CardInfo.java:838)
        at com.providername.client.Agent.setupTransaction(Agent.java:681)
    at com.providername.client.Agent.setupTransaction(Agent.java:692)
    at com.providername.client.Agent.request(Agent.java:281)
    at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:74)
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:1634)
    at cfprovidername2ecfc526409752$funcSENDXMLOBJECT.runFunction(D:\site\components\providername.cfc:210)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:344)
    at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:290)
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:254)
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:56)
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:207)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:169)
    at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:1807)
    at cftransactions2ecfc114461696$funcTRANSACTION.runFunction(D:\site\components\transactions.cfc:175)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:344)
    at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:290)
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:254)
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:56)
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:207)
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:366)
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:198)
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:157)
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:1594)
    at coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:341)
    at cfauthorise2dprovidername2ecfm1546743078._factor7(D:\site\payment\authorise-providername.cfm:224)
    at cfauthorise2dprovidername2ecfm1546743078._factor27(D:\site\payment\authorise-providername.cfm:164)
    at cfauthorise2dprovidername2ecfm1546743078._factor30(D:\site\payment\authorise-providername.cfm:91)
    at cfauthorise2dprovidername2ecfm1546743078.runPage(D:\site\payment\authorise-providername.cfm:1)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:1915)
    at cfauthorise2ecfm767248619.runPage(D:\site\payment\authorise.cfm:10)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:1915)
    at cftemplate2ecfm1091873885._factor4(D:\site\server\template.cfm:247)
    at cftemplate2ecfm1091873885.runPage(D:\site\server\template.cfm:1)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:1915)
    at cfapplication2ecfm1526755454._factor31(D:\site\application.cfm:673)
    at cfapplication2ecfm1526755454.runPage(D:\site\application.cfm:1)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:1915)
    at cfApplication2ecfm1608241748.runPage(D:\site\payment\Application.cfm:30)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.CfincludeFilter.include(CfincludeFilter.java:33)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:172)
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:51)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:86)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:69)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:115)
    at coldfusion.CfmServlet.service(CfmServlet.java:107)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:257)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541)
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:204)
    at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:318)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:426)
    at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:264)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
Loftx
  • 1,760
  • 4
  • 29
  • 50
  • Seem to be something to do with your RequestObject where it fails to verify the data – Marcos Placona Mar 10 '10 at 17:24
  • Can you show us more of your code - so we can see the try/catch calls. – Raymond Camden Mar 10 '10 at 17:27
  • @CF Jedi Master I've added the try catch code. It's as simple as I can get it and it makes no difference. – Loftx Mar 10 '10 at 17:33
  • @mplacona I agree the RequestObject is causing the error due to this verification error, but surely I should be able to catch this somehow without it casing a JRun error. – Loftx Mar 10 '10 at 17:34
  • Maybe "Any" doesn't work, and you need the java exception class? http://www.petefreitag.com/item/699.cfm – Henry Mar 10 '10 at 19:19
  • Any _should_ work, but I'd try Henry's idea, I'd also try leaving the type blank. Yes, blank should imply any, but... – Raymond Camden Mar 10 '10 at 20:00
  • Also, be anal and ensure the error isn't later. Add a cfabort to that catch. – Raymond Camden Mar 10 '10 at 20:01
  • @Henry I've tried your idea and used which seems to be the error which is thrown but it makes no difference. – Loftx Mar 11 '10 at 09:48
  • @CF Jedi Master I've also tried leaving the cfcatch blank, and there's an already a cfabort in the cfcatch - no difference. – Loftx Mar 11 '10 at 09:49
  • Maybe file a bug report? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html – Henry Mar 11 '10 at 19:51

1 Answers1

2

I'm a bit late to the party on this, but what you're getting is not a JRun error per se. It seems that the error is thrown in the JRE and JRun is showing it as a "Servlet Error". Notice the lines in your stack trace:

com.providername.client.errors.VerifyErrorReport: Transaction fails verification
com.providername.client.errors.BadRequest: Request fails verification checks
    com.providername.client.errors.BadCardNumber: Card length was 16, but we were expecting 0
        at com.providername.util.CardInfo.verifyCardNumber(CardInfo.java:412)

That looks like an error thrown by the CardInfo class within verifyCardNumber() on line 412. I think JRun just serves the error as a "Servlet Error" because there's a hard stop in com.providername.client.errors.VerifyErrorReport.

This also might be the reason your <cfcatch> won't catch that exception. The Java class might catch that error and throw that exception within Java which causes that ugly JRun 500 error.

If you don't have the source of the Java to inspect why you're getting that exception in CardInfo, then you should contact the people who own the source to see if they have any insight.

I hope this is in some way helpful to you.

Joe D
  • 3,588
  • 2
  • 19
  • 14
  • Hi Joe, thanks for your answer - the code is owned by a credit card processor who won't release the source or provide any further information about the error. I will mark yours as the accepted answer in the absence of any further information! – Loftx Aug 29 '10 at 08:16