groovy grails 4迁移特性延迟加载问题-HHH 000142:字节码增强失败

2ic8powd  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(127)

我已经将我的应用程序从Grails-3.x迁移到Grails-4.1.1。我的大多数Domain类都实现了以下Traits类(DynamicProperties),由于某种原因,该类实现了GormEntity-以覆盖propertyMissing方法。

trait DynamicProperties<D> implements GormEntity<D> {

def dynamic = [:]

def propertyMissing(String name, value) {
    if (!propertyIsDatasource(name)) {
        dynamic[name] = value
    }
}

def propertyMissing(String name) {
    if (propertyIsDatasource(name)) {
        super.propertyMissing(name)
    } else {
        dynamic[name]
    }
}

boolean propertyIsDatasource(String name) {
    false
} 
}

上述特征已经由许多类似的域类实现

class Customer implements DynamicProperties<Customer> {

String customerCode
String customerName
Address address
....
}

现在,当我运行应用程序时,它抛出以下异常

HHH000142: Bytecode enhancement failed: com.apps.billing.Customer.
Caused by: java.lang.NullPointerException
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:37)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:75)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
at **com.apps.billing.common.DynamicProperties$Trait$Helper.$init$**(DynamicProperties.groovy:7)

它以前在Grails3.x中运行良好

h4cxqtbf

h4cxqtbf1#

我在将项目迁移到Grails 4.0.13时遇到了类似的问题。
我追踪到这个问题的触发点是trait类中的成员变量有默认值,我看到你也有同样的问题,用空map初始化动态属性。
我建议在您的一个propertyMissing方法中延迟初始化它。

相关问题