Skip to content

Commit 81fe4c4

Browse files
committed
Fix passing null to Codec . @CompileStatic must have caused this problem. NullObject instances get passed to Codecs when encodeAs* method is called on null. This fixes the problem.
1 parent 5830a9a commit 81fe4c4

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

grails-core/src/main/groovy/org/codehaus/groovy/grails/support/encoding/CodecMetaClassSupport.groovy

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import groovy.transform.CompileStatic
2020

2121
import org.codehaus.groovy.grails.commons.GrailsCodecClass
2222
import org.codehaus.groovy.runtime.GStringImpl
23+
import org.codehaus.groovy.runtime.NullObject
2324

2425
/**
2526
* Helper methods for Codec metaclass operations.
@@ -53,7 +54,7 @@ class CodecMetaClassSupport {
5354
->
5455
def encoder = codecClass.getEncoder()
5556
if (encoder) {
56-
return encoder.encode(delegate)
57+
return encoder.encode(delegate != NullObject.NullObject ? delegate : null)
5758
}
5859

5960
// note the call to delegate.getClass() instead of the more groovy delegate.class.
@@ -66,7 +67,7 @@ class CodecMetaClassSupport {
6667
->
6768
def decoder = codecClass.getDecoder()
6869
if (decoder) {
69-
return decoder.decode(delegate)
70+
return decoder.decode(delegate != NullObject.NullObject ? delegate : null)
7071
}
7172

7273
// note the call to delegate.getClass() instead of the more groovy delegate.class.
@@ -79,13 +80,13 @@ class CodecMetaClassSupport {
7980
// Resolve codec methods once only at startup
8081
def encoder = codecClass.getEncoder()
8182
if (encoder) {
82-
encoderClosure = { -> encoder.encode(delegate) }
83+
encoderClosure = { -> encoder.encode(delegate != NullObject.NullObject ? delegate : null) }
8384
} else {
8485
encoderClosure = { -> throw new MissingMethodException(encodeMethodName, delegate.getClass(), EMPTY_ARGS) }
8586
}
8687
def decoder = codecClass.getDecoder()
8788
if (decoder) {
88-
decoderClosure = { -> decoder.decode(delegate) }
89+
decoderClosure = { -> decoder.decode(delegate != NullObject.NullObject ? delegate : null) }
8990
} else {
9091
decoderClosure = { -> throw new MissingMethodException(decodeMethodName, delegate.getClass(), EMPTY_ARGS) }
9192
}

0 commit comments

Comments
 (0)