これは、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));
}
}