更新这已作为ColdFusion中的错误提交,https://bugbase.adobe.com/index.cfm?event=bug&id=3546237
我一直遇到CF9和NULL POINTER错误的问题,这些错误在Railo中似乎不是问题。我创建了一个简单的CFC和相关的mxunit单元测试,以确认这一点。
在Railo(4.0.4)上,两个单元测试均通过。在Coldfusion(9.0.1)上,单元测试getMetaDataBeforeMethodInvocation失败,GetMetaData调用上出现NULL POINTER错误。
目前我只能推测,在调用该组件中的方法之前,CF9无法访问ObjectLoad之后的完整元数据。是否有人能够更好地解决这个问题,和/或提供一个更好的解决方案,而不是确保在执行getMetaData之前调用对象中的方法?
这是CFC
// NullError.cfc
component {
public NullError function init() {
variables.uuid = CreateUUID();
return this;
}
public string function getUUID() {
return uuid;
}
}
和相关的单元测试
// NullErrorTest.cfc
component extends='mxunit.framework.TestCase' {
private any function setupTheTests() {
var o = new NullError();
debug(o.getUUID());
// Dump meta data
debug(GetMetaData(o));
// Save and load it, and return
return ObjectLoad(ObjectSave(o));
}
public void function getMetaDataBeforeMethodInvocation() {
var o = setupTheTests();
// Get meta data, and then get uuid, expecting this to ERROR (NULL POINTER)
debug(GetMetaData(o)); // CF FAILS HERE, RAILO DOES NOT
debug(o.getUUID());
}
public void function getMetaDataAfterMethodInvocation() {
var o = setupTheTests();
// Get uuid, and then get meta data, expecting this to be ok
debug(o.getUUID());
debug(GetMetaData(o));
}
}
答案 0 :(得分:1)
我可以在CF 9.0.2和10.0.9中确认这种有害行为。
如果我是你,我会提出一个错误。
repro案例可以从你拥有的东西中简化:
// C.cfc
component {}
<!--- test.cfm --->
<cfscript>
o1 = new C();
writeDump(getMetaData(o1)); // OK
o2 = objectLoad(objectSave(o1));
writeDump(getMetadata(o2)); // breaks
</cfscript>
我不知道通过解决方法提出什么建议,因为它已经如此清晰而根本地被打破。