【问题标题】:NULL POINTER error when using ObjectLoad(ObjectSave())使用 ObjectLoad(ObjectSave()) 时出现 NULL POINTER 错误
【发布时间】:2013-04-12 18:09:22
【问题描述】:

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

【问题讨论】:

    标签: coldfusion nullpointerexception coldfusion-9 cfc railo


    【解决方案1】:

    我可以在 CF 9.0.2 和 10.0.9 中确认这种错误行为。

    如果我是你,我会提出一个错误。

    复制案例可以大大简化:

    // C.cfc
    component {}
    
    <!--- test.cfm --->
    <cfscript>
    o1 = new C();
    writeDump(getMetaData(o1)); // OK
    
    o2 = objectLoad(objectSave(o1));
    writeDump(getMetadata(o2)); // breaks
    </cfscript> 
    

    鉴于它是如此明显和根本性的破坏,我不知道该建议什么解决方法。

    【讨论】:

    • 嗯。只需在 getMetadata() 调用“修复”它之前执行 writeDump(o)。可能值得反编译 writeDump() 并查看它在做什么......它显然是以某种方式轻推对象以导致生成元数据。虽然它仍然是一个错误,但你仍然应该这样提出它:bugbase.adobe.com
    • 感谢您确认我不会发疯。将尽快考虑提交为错误:) 似乎调用任何方法都会导致它正常。也许 cf 只在方法或 writedump 调用之后拉入数据
    • 正如上面更新中提到的,现在已经提出了 adobe 的错误,所以希望它可以引起注意。 bugbase.adobe.com/index.cfm?event=bug&id=3546237
    • 已接受此作为答案,因为似乎没有进一步的进展 - 我想它现在掌握在 Adob​​e 手中。这一点以及这个特定代码很可能最终出现在不会遇到这个问题的 Railo 上的事实。
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2013-02-23
    • 2020-10-04
    • 2012-05-27
    • 2017-10-01
    • 2021-10-20
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多