Make BeforeValidateHelper Serializable Related to grails/grails-core#9986
diff --git a/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java b/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java index 7c3342a..289b457 100644 --- a/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java +++ b/grails-datastore-gorm/src/main/groovy/org/grails/datastore/gorm/support/BeforeValidateHelper.java
@@ -16,11 +16,12 @@ import groovy.lang.MetaClass; +import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class BeforeValidateHelper { +public class BeforeValidateHelper implements Serializable { public static final String BEFORE_VALIDATE = "beforeValidate"; private Map<Class<?>, BeforeValidateEventTriggerCaller> eventTriggerCallerCache = new ConcurrentHashMap<Class<?>, BeforeValidateEventTriggerCaller>();
diff --git a/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy b/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy new file mode 100644 index 0000000..4becca9 --- /dev/null +++ b/grails-datastore-gorm/src/test/groovy/org/grails/datastore/gorm/BeforeValidateHelperSerializationSpec.groovy
@@ -0,0 +1,54 @@ +package org.grails.datastore.gorm + +import org.grails.datastore.gorm.support.BeforeValidateHelper +import spock.lang.Specification + + +class BeforeValidateHelperSerializationSpec extends Specification { + + void "test serializing an instance of BeforeValidateHelper"() { + given: + def helper = new BeforeValidateHelper() + + def bos = new ByteArrayOutputStream() + def oos = new ObjectOutputStream(bos) + + when: + oos.writeObject(helper) + oos.flush() + + def bis = new ByteArrayInputStream(bos.toByteArray()) + def ois = new ObjectInputStream(bis) + def helper2 = ois.readObject() + + then: + helper2 instanceof BeforeValidateHelper + } + + void "test serializing an instance which references BeforeValidateHelper"() { + given: + def obj = new SomethingThatReferencesBeforeValidateHelper(firstName: 'Jeff', lastName: 'Brown') + + def bos = new ByteArrayOutputStream() + def oos = new ObjectOutputStream(bos) + + when: + oos.writeObject(obj) + oos.flush() + + def bis = new ByteArrayInputStream(bos.toByteArray()) + def ois = new ObjectInputStream(bis) + def obj2 = ois.readObject() + + then: + obj2 instanceof SomethingThatReferencesBeforeValidateHelper + obj2.firstName == 'Jeff' + obj2.lastName == 'Brown' + } +} + +class SomethingThatReferencesBeforeValidateHelper implements Serializable { + String firstName + String lastName + private BeforeValidateHelper helper = new BeforeValidateHelper() +}