我已经将我的应用程序从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中运行良好
1条答案
按热度按时间h4cxqtbf1#
我在将项目迁移到Grails 4.0.13时遇到了类似的问题。
我追踪到这个问题的触发点是trait类中的成员变量有默认值,我看到你也有同样的问题,用空map初始化动态属性。
我建议在您的一个propertyMissing方法中延迟初始化它。