3

我遇到了由以下代码段的 CFINVOKEARGUMENT 行引起的异常原因:

<CFOUTPUT query="cfmx.Messages"><CFSILENT>
<CFINVOKE component="com_VUI_RemoveIllegalChars" method="formatString" returnvariable="cfmx.formattedMessage">
   <CFINVOKEARGUMENT name="inString" value="#TTSText#">
</CFINVOKE>
</CFSILENT>

异常的确切文本是:

将 Coldfusion.runtime.NoOperScope 类型的对象强制转换为不兼容的类型时出错。这通常表示 Java 中的编程错误,尽管它也可能意味着您尝试以与设计不同的方式使用外来对象。Coldfusion.runtime.NoOperScope 不能转换为 coldfusion.runtime.ApplicationScope

笔记:

  • cfmx.Messages 是在 CFPROCRESULT 中返回的对象,通过 CFDUMP 检查它确实包含预期的数据
  • com_VUI_RemoveIllegalChars 根本没有改变
  • TTSText 是结果集中的有效列
  • 我怀疑这可能是 ColdFusion 配置问题

提前感谢任何可以阐明可能导致此问题的原因的人。

编辑:从异常日志中完成转储:

"Error","jrpp-11","01/06/09","15:11:37",,"coldfusion.runtime.NoOperScope 不能强制转换为coldfusion.runtime.ApplicationScope 包含或处理的文件的具体顺序是:C:\Inetpub\wwwroot\ermsvui\proc_playsitestatus.cfm,行:30" java.lang.ClassCastException:coldfusion.runtime.NoOperScope 不能在 Coldfusion.runtime.RuntimeServiceImpl.getFullTagName(RuntimeServiceImpl. java:625) 在coldfusion.runtime.TemplateProxyFactory.getFullName(TemplateProxyFactory.java:1082) 在coldfusion.runtime.TemplateProxyFactory.resolveName(TemplateProxyFactory.java:184) 在coldfusion.runtime.TemplateProxyFactory.resolveName(TemplateProxyFactory.java:157) 在Coldfusion.runtime.TemplateProxyFactory。在 Coldfusion.tagext.lang.InvokeTag.doEndTag(InvokeTag.java:358) 在 cfproc_playsitestatus2ecfm1824676963.runPage(C:\Inetpub\ wwwroot\ermsvui\proc_playsitestatus.cfm:30) 在coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) 在coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) 在coldfusion.filter.CfincludeFilter.invoke (CfincludeFilter.java:65) 在coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:279) 在coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) 在coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java: 40) 在coldfusion.filter.PathFilter.invoke(PathFilter.java:86) 在coldfusion。filter.LicenseFilter.invoke(LicenseFilter.java:27) 在coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) 在coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 在coldfusion.filter.BrowserFilter.invoke (BrowserFilter.java:38) 在coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) 在coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 在coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java: 22) 在coldfusion.CfmServlet.service(CfmServlet.java:175) 在coldfusion.monitor 在jrun.servlet.FilterChain.doFilter(FilterChain.java:86) 在coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)。在coldfusion.bootstrap 的event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)。BootstrapFilter.doFilter(BootstrapFilter.java:46) 在 jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 在 jrun.servlet.FilterChain.service(FilterChain.java:101) 在 jrun.servlet.ServletInvoker.invoke(ServletInvoker .java:106) 在 jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 在 jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:284) 在 jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)在 jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 在 jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 在 jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) ) 在 jrunx 的 jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)。scheduler.WorkerThread.run(WorkerThread.java:66)

上面的代码片段包含 proc_playsitestatus.cfm 的第 28 - 32 行

编辑:

TTS 文本的值在这种情况下是“测试的消息是”

com_VUI_RemoveIllegalChars 的来源:

<CFCOMPONENT displayname="Format a string for use in VoiceXML" hint="returns a string formatted for voiceXML" output="yes">
    <CFFUNCTION name="formatString" access="public" returntype="string" displayname="Format String" hint="Formats String for VoiceXML">
        <cfargument name="inString" type="string" required="true" displayname="input string" hint="pass in the string to be formatted">
        <CFSET v.messageWithoutChars = replace(inString, "<", "", "all")>
        <CFSET v.messageWithoutChars = replace(v.messageWithoutChars, ">", "", "all")>
        <CFSET v.messageWithoutChars = replace(v.messageWithoutChars, "&", "and", "all")>
        <CFSET v.messageWithoutChars = REReplace(v.messageWithoutChars, "\.+", ".", "all")>
        <CFSET v.messageWithoutChars = replace(v.messageWithoutChars, "!", ".", "all")>
        <CFSET v.messageWithoutChars = replace(v.messageWithoutChars, "\", " ", "all")>
        <CFSET v.messageWithoutChars = replace(v.messageWithoutChars, "/", " ", "all")>
        <CFSET v.messageWithoutChars = REReplace(v.messageWithoutChars, "[[:punct:]]{2,}", " ", "all")>
        <cfreturn v.messageWithoutChars>
    </CFFUNCTION>
</CFCOMPONENT>
4

3 回答 3

2

你确定那条线#?我认为错误在于 CFC 方法本身。你可以检查一下,如果我是对的,请发布 CFC 方法中的行吗?

于 2009-01-06T20:12:57.387 回答
1

ColdFusion 配置中未启用“启用应用程序变量”设置。

于 2009-01-07T16:04:55.623 回答
0

没有com_VUI_RemoveIllegalChars组件的内容和TTSText变量的值,你就没有给我们很多东西,在这里。你能把那些贴出来吗?(我知道有时你不能出于保密协议/等原因)

于 2009-01-07T13:15:39.583 回答