2011-01-31 40 views
1

我有一个图像处理CFC来处理上传的图像。在该方法中,我使用ImageNew()创建上传文件的新映像,然后根据需要调整其大小(以及其他一些验证以确保它是图像)。这里的代码片段:<cfcatch>不“捕捉”错误

<cftry> 
     <cfset ImageScaleToFit(#local.uploadedImage#, 72, "", "highestPerformance")> 
     <cfimage action="write" source="#local.uploadedImage#" destination="#local.newThumbName#" overwrite="yes" > 
     <cfcatch type="any"> 
      <cfset local.response['catcher'] = #cfcatch.Detail#> 
      <cfset local.response['success'] = false> 
      <cfreturn local.response> 
     </cfcatch> 
    </cftry> 

后,我upoloaded代码它开始抛出一个错误,因为“highestPerformance”是不是在生产服务器上的图像压缩的可用选项生产服务器。

作为<cftry>异常处理的备份我有Application.cfc给我发送了一个详细信息的电子邮件,同时屏蔽了来自用户的错误,如果'尝试'不会导致错误。

在整个CFC中,<cftry>都会捕获错误并将其发送回我的页面。它被输出到控制台。

我的问题是,为什么这个特定的代码块不能与<cftry>一起工作,并且错误被直接发送到我的Application.CFC中的异常处理?

是否存在某种我内置的异常处理无法处理的“错误阈值”?

顺便说一句,“高性能”工程,即使在Adobe提供的文件说,“highestPerformance”是一个可行的选择某种原因...

编辑:

下面是我从得到的错误在的Application.cfc

Could not initialize class javax.media.jai.JAI

而且堆栈跟踪:

ava.lang.NoClassDefFoundError: Could not initialize class javax.media.jai.JAI at coldfusion.image.Image.resizeImageWithJAI(Image.java:1189) at coldfusion.image.Image.resize(Image.java:1119) at coldfusion.image.Image.scaleToFit(Image.java:974) at coldfusion.image.Image.scaleToFit(Image.java:959) at coldfusion.runtime.CFPage.ImageScaleToFit(CFPage.java:6189) at cfspecials2ecfc103515531$funcUPLOADFILEXHR.runFunction(C:\cfc\thecfc.cfc:143) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418) at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:324) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:59) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:277) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:192) at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2471) at cfspecials2ecfc103515531$funcMULTIUPLOAD.runFunction(C:\cfc\thecfc.cfc:32) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418) at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:324) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:59) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:277) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:463) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:453) at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:320) at coldfusion.filter.ComponentFilter.invoke(ComponentFilter.java:183) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:282) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.xml.rpc.CFCServlet.invoke(CFCServlet.java:138) 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 com.seefusion.Filter.doFilter(Filter.java:49) at com.seefusion.SeeFusion.doFilter(SeeFusion.java:1494) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 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.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 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)

+0

你可以发布`Application.cfc`接收到的错误消息吗? – orangepips 2011-01-31 19:45:51

+0

@orangepips:刚刚添加了错误消息信息... – Ofeargall 2011-01-31 19:52:43

+0

看起来像@Dave Long可能有正确的想法。请参阅此Adobe论坛主题:http://forums.adobe.com/message/2296928。除了更新ColdFusion之外,另一个尝试是从`onError()`log/email`#exception.stacktrace#`获取发生异常的文件和行号。 – orangepips 2011-01-31 19:58:10

回答

3

如果您使用的是ColdFusion 8,请确保您已应用了所有修补程序和更新。 CF 8在图像功能和标签方面存在很多主要问题,并且如果Java导致CF下面的错误可能无法捕捉到它。即使你不在CF 8上,也要确保所有内容都已更新。

0

由于对ImageScaleToFit()的调用导致JVM崩溃,捕获失败。听起来您的生产服务器缺少Java Advanced Imaging API(javax.media.jai.JAI),或者它不包含在类路径中。