У меня есть код Grails/Groovy, первоначально разработанный для Grails 2, и мы недавно провели рефакторинг для Grails 3. Работая в Intellij IDEA (и на нашем сервере Tomcat), исходный объект, являющийся DocumentSource, не идентифицируется как таковой. Вместо этого он идентифицируется как базовый исходный класс. Этот код вернул ожидаемые результаты в Grails 2, но поставил меня в тупик в Grails 3.
При проверке исходного объекта в отладчике поля верхнего уровня пусты для типа и профиля, а метакласс является источником. В разделе target->handler находятся ожидаемые значения для типа, профиля, documentId, documentName и метакласса.
Я не уверен, связано ли это с 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
}
}
...
source.instanceOf(DocumentSource)
? - person doelleri   schedule 23.08.2017