当我们记录错误时,我们希望收集一些关于应用程序状态的信息,以帮助我们诊断原因。在我们的错误日志代码,我们有这样的事情:奇怪的UnsupportedOperationException cfdump中的java错误
<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>
其实更多一点有它比(我们检查local.scope是否试图cfdump,并关系到我们的信息收集一些其他的事情之前定义,但这些是基本的位)。 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)
在异常结构的实际消息项目为空字符串和类型是java.lang.UnsupportedOperationException
。
奇怪的是,如果我们手动运行这个精确的代码,它会清除问题,并且事情会一段时间继续,但是当它再次发生时,它会继续发生,直到我们“再次手动运行代码。这就像有些东西不可思议,只有我们帮助它才能恢复。
我们正在使用CF10和AFAIK,我们在第一次开始时就没有升级CF或Java。
我的问题是什么导致这个? (奖金,如果你能解释一下为什么我们的解决方法暂时“修复”吧。)
编辑这里有点堆栈跟踪的,从顶部开始:
java.lang.UnsupportedOperationException在 的ColdFusion .thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446) 在coldfusion.runtime.CgiScope.resolve(CgiScope.java:146)在 coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328)在 coldfusion.runtime .Scope.get(Scope.java:60)at coldfusion.runtime.DotResolver.resolve(DotRe (ColdFusion.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 (CF:.java:630) at coldfusion.runtime.CFPage.IsDefined(CFPage.java:925)at cfdump2ecfm1568701689 $ funcDUMPSTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:1957)(UDFMethod.java:472) 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)在 coldfusion.runtime.UDFMethod.invoke(UDFMethod.java :518)在 coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)在 cfdump2ecfm1568701689 $ funcHANDLESTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:781) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)在 coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在 coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(F unctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)处 coldfusion.runtime.CfJspPage._invokeUDF coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)(CfJspPage。 (UDF:java:2624)at cfdump2ecfm1568701689 $ funcRENDEROUTPUT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:693) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在 coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:3)上的 21)在 coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)在 coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)在 cfdump2ecfm1568701689._factor18(E:\ cf10_final \ cfusion \ wwwroot的\ WEB -INF \ cftags \ dump.cfm:565)at .....
'UnsupportedOperationException'是许多类使用的通用异常。所以原因可能是很多事情。就像名字所暗示的那样,它被用来表示你正在做的事情(或者是某个cfdump正在做的事情)不被支持。你能发布完整的堆栈跟踪吗?它可能会提供一些关于*操作导致问题的线索。另外,当错误发生时,您是否能够分辨正在评估哪些local元素?我想知道是否a)可能与“评估”的使用有关,b)您是否确实需要“评估”。你可以使用结构符号'local [keyName]'来代替吗? – Leigh
啊,是的 - 我本来打算包括一点堆栈跟踪并且忘记了。我会用这个更新这个问题。至于避免评估我喜欢这个想法。而不是处理代表我们想要倾倒的范围的字符串列表,也许我可以使用实际范围的数组来代替。我会给你一个机会,看看它的票价。谢谢! – jinglesthula
我们想要的是实际的作用域,我们从一个与我们想要的作用域名称相同的字符串开始。如果我们把它拿出来,那么代码就变成了字符串“CGI”,“FORM”等的cfdump,这是没有用的,可能不会出现问题,因为现在我们试图转储完全不同的东西更简单)。 – jinglesthula