我有最初在Grails 2下开发的Grails / Groovy代码,我们最近重构为Grails 3.在Intellij IDEA(以及我们的Tomcat服务器)上运行,作为DocumentSource的源对象不会被识别为一个。它被识别为基础Source类。这段代码在Grails 2中返回了预期的结果,但让我在Grails 3中难倒。
检查调试器中的源对象,顶级字段对于类型和配置文件为null,而metaClass是Source。在target->处理程序下向下钻取,找到type,profile,documentId,documentName和metaClass的预期值。
我不确定这是否与GORM / Hibernate有关。我们已经尝试使用不同的版本,我不确定那里的影响。有什么想法吗?
// Base Domain Class
class Source {
String type
Profile profile
}
// Extended Domain Class
class DocumentSource extends Source {
String documentId
String documentName
}
// Further Extended Domain Class
class DocumentLocatorSource extends DocumentSource {
String locatorId
}
// Snippet from Service Class
...
sourceReferences.each { sourceReference ->
def source = sourceReference.source
MarshalledResponse response = new MarshalledResponse()
response.sourceId = source.id
if(source instanceof Source) {
// Get's here!
cdsSource.sourceId = source.id
}
if(source instanceof DocumentSource) {
// Never get's here. :-(
response.documentid = ((DocumentSource)source).documentId
response.documentname = ((DocumentSource)source).documentName
}
if(source instanceof DocumentLocatorSource) {
response.locatorid = ((DocumentLocatorSource)source).locatorId
}
}
...