使用ObjectLoad(ObjectSave())时出现NULL POINTER错误

时间:2013-04-19 11:00:52

标签: coldfusion nullpointerexception coldfusion-9 cfc railo

更新这已作为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));
    }
}

1 个答案:

答案 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> 

我不知道通过解决方法提出什么建议,因为它已经如此清晰而根本地被打破。