【发布时间】:2014-08-08 17:42:54
【问题描述】:
在 ColdFusion 10 中对组件调用 getMetaData() 似乎会随机抛出内部 NullPointerException。虽然此异常既不暴露也不影响实际请求(因此对我们的应用程序本身并不重要),但它仍会迅速填满 exception.log 文件。
我注意到这可能与 ColdFusion 的路径缓存有关,因为我仅在生产服务器上获得这些 NullPointerException 条目。我还注意到,这个异常只在我使用 getMetaData() 的每个组件上抛出一次,尽管并非每次第一次调用似乎都会触发它。
澄清一下:getMetaData() 运行良好,但有时会在 ColdFusion 的 exception.log 文件中记录 NullPointerException。
有没有人知道解决方案(除了禁用缓存或 exception.log 文件)?
背景:
我使用 getMetaData() 来识别组件,在使用 <cfinterface> 时特别有用。
java.lang.NullPointerException
at coldfusion.util.Utils.getServletPath(Utils.java:100)
at coldfusion.util.Utils.getServletPath(Utils.java:90)
at coldfusion.util.Utils.getBaseTemplatePath(Utils.java:419)
at coldfusion.runtime.TemplateProxyFactory.getTemplateFileHelper(TemplateProxyFactory.java:1567)
at coldfusion.runtime.MetadataUtils.getComponentMetadata(MetadataUtils.java:112)
at coldfusion.runtime.CfJspPage.GetComponentMetadata(CfJspPage.java:2744)
at coldfusion.runtime.TemplateProxy.getRuntimeComponentMetadata(TemplateProxy.java:1940)
at coldfusion.runtime.TemplateProxy.getRuntimeMetadata(TemplateProxy.java:1801)
at coldfusion.runtime.MetadataUtils.getMetaData(MetadataUtils.java:54)
at coldfusion.runtime.CfJspPage.GetMetadata(CfJspPage.java:2717)
【问题讨论】:
-
由于 CF 是封闭源代码,因此很难从 CF 工程团队以外的任何人那里得到答案。我会在这里提交错误报告:bugbase.adobe.com。同时,您可以使用 IsInstanceOf() 来识别组件的类型吗? wikidocs.adobe.com/wiki/display/coldfusionen/IsInstanceOf
-
不幸的是 isInstanceOf() 需要完全限定的路径。由于我在不同的服务器环境中使用动态映射,所以我不知道确切的路径。通过 getMetaData() 进行反射似乎是最好的方法。好吧,我猜不是。
-
除非您看到抛出错误的特定性能问题,否则我会坚持您所拥有的。在你的情况下,它可能是最好的解决方案。额外的日志记录可能只是 Adobe 需要修复的一个错误。如果有问题的日志记录使用 Log4J,您可能能够找到属性文件并关闭该包的日志记录。 Log4J 是一个常见的 Java 日志库。 stackoverflow.com/questions/4972954/…
-
我相信这个问题在 Coldfusion 10 Update 16 中得到了解决。详细信息可以在 Adobe 的网站上找到:helpx.adobe.com/coldfusion/kb/…
-
不,错误修复与 ORM 相关。该错误仍然出现在CF10中,但我不知道CF11+。我们将错误报告中提到的代码移至
onRequestStart事件而不是onSessionStart事件,这解决了我们特定情况下的问题。
标签: java reflection coldfusion nullpointerexception coldfusion-10