cfdump中出现奇怪的UnsupportedOperationException java错误

时间:2014-01-08 17:05:49

标签: java exception coldfusion

当我们记录错误时,我们希望收集有关应用程序状态的一些信息,以帮助我们诊断原因。在我们的错误记录代码中,我们有类似这样的内容:

<cfset local.scopeList = "CGI,FORM,URL,APPLICATION,REQUEST,COOKIE,CLIENT" />    
<cfsavecontent variable="local.errorInfo">
  <cfloop list="#local.scopeList#" index="local.scope">
    <cfdump var="#Evaluate(local.scope)#" />
  </cfloop>
</cfsavecontent>

实际上还有更多的东西(我们检查是否在尝试cfdump之前定义了local.scope以及与我们的信息收集相关的其他一些事情,但这些是基本的部分)。 local.errorInfo是我们为以后观看而留下的东西的一部分。

偶尔我们会看到一个异常,TagContext显示错误发生在我们代码中的cfdump行上。有趣的是,在TagContext中,我们的代码是第三项。前两个在\ WEB-INF \ cftags \ dump.cfm中,它们的RAW_TRACE信息看起来像

at cfdump2ecfm1568701689._factor4({path on server}\WEB-INF\cftags\dump.cfm)

at cfdump2ecfm1568701689._factor1({path on server}\WEB-INF\cftags\dump.cfm)

异常结构中的实际Message项为空字符串,类型为java.lang.UnsupportedOperationException

奇怪的是,如果我们手动运行这个确切的代码,它会清除问题并且事情会持续一段时间,但是当它再次开始发生时它将继续发生,直到我们通过运行“给它一个踢”再次手动代码。这就像有些东西变得不稳定,直到我们帮助它才能恢复。

我们在CF10和AFAIK上,我们在接近第一次开始发生时的任何时间都没有升级CF或Java。

我的问题是造成这种情况的原因是什么? (如果你能解释为什么我们的解决方法会暂时“修复”它,你会获得奖励。)

编辑这里有一些堆栈跟踪,从顶部开始:

  

java.lang.UnsupportedOperationException at   coldfusion.thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446)   在coldfusion.runtime.CgiScope.resolve(CgiScope.java:146)at   coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328)at   coldfusion.runtime.Scope.get(Scope.java:60)at   coldfusion.runtime.DotResolver.resolve(DotResolver.java:45)at   coldfusion.runtime.DotResolver.resolve(DotResolver.java:72)at   coldfusion.runtime.DotResolver.resolve(DotResolver.java:88)at   coldfusion.runtime.NeoPageContext.SymTab_resolveSplitName(NeoPageContext.java:1033)   在   coldfusion.runtime.NeoPageContext.SymTab_resolveDottedName(NeoPageContext.java:1011)   在   coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:657)   在   coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:630)   在coldfusion.runtime.CFPage.IsDefined(CFPage.java:925)at   cfdump2ecfm1568701689 $ funcDUMPSTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:1957)   在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at   coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at   coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)   在   coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)   在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at   coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)at at   coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)at at   cfdump2ecfm1568701689 $ funcHANDLESTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:781)   在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at   coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at   coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)   在   coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)   在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at   coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)at at   coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)at at   cfdump2ecfm1568701689 $ funcRENDEROUTPUT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:693)   在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at   coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at   coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)   在   coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)   在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at   coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)at at   coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)at at   .....在

的cfdump2ecfm1568701689._factor18(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:565)

1 个答案:

答案 0 :(得分:0)

我认为范围不应该以这种方式倾倒。展开你的cfloop,你应该没事。

与变量不同,范围是一种不同的动物。我认为动态引用范围本身是不自然的,因此我对Evaluate被绊倒并不感到惊讶。