Skip to content

Commit c9038f7

Browse files
committed
Added mismatch check for deserialization result
1 parent c89e238 commit c9038f7

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/main/kotlin/com/fasterxml/jackson/module/kotlin/Extensions.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ inline fun <reified T> Any?.checkTypeMismatch(): T {
7070

7171
inline fun <reified T> ObjectMapper.readValue(jp: JsonParser): T = readValue(jp, jacksonTypeRef<T>())
7272
.checkTypeMismatch()
73-
inline fun <reified T> ObjectMapper.readValues(jp: JsonParser): MappingIterator<T> = readValues(jp, jacksonTypeRef<T>())
73+
inline fun <reified T> ObjectMapper.readValues(jp: JsonParser): MappingIterator<T> {
74+
val values = readValues(jp, jacksonTypeRef<T>())
75+
76+
return object : MappingIterator<T>(values) {
77+
override fun nextValue(): T = super.nextValue().checkTypeMismatch()
78+
}
79+
}
7480

7581
inline fun <reified T> ObjectMapper.readValue(src: File): T = readValue(src, jacksonTypeRef<T>()).checkTypeMismatch()
7682
inline fun <reified T> ObjectMapper.readValue(src: URL): T = readValue(src, jacksonTypeRef<T>()).checkTypeMismatch()
@@ -89,7 +95,13 @@ inline fun <reified T> ObjectMapper.convertValue(from: Any?): T = convertValue(f
8995

9096
inline fun <reified T> ObjectReader.readValueTyped(jp: JsonParser): T = readValue(jp, jacksonTypeRef<T>())
9197
.checkTypeMismatch()
92-
inline fun <reified T> ObjectReader.readValuesTyped(jp: JsonParser): Iterator<T> = readValues(jp, jacksonTypeRef<T>())
98+
inline fun <reified T> ObjectReader.readValuesTyped(jp: JsonParser): Iterator<T> {
99+
val values = readValues(jp, jacksonTypeRef<T>())
100+
101+
return object : Iterator<T> by values {
102+
override fun next(): T = values.next().checkTypeMismatch<T>()
103+
}
104+
}
93105
inline fun <reified T> ObjectReader.treeToValue(n: TreeNode): T? = readValue(this.treeAsTokens(n), jacksonTypeRef<T>())
94106

95107
inline fun <reified T, reified U> ObjectMapper.addMixIn(): ObjectMapper = this.addMixIn(T::class.java, U::class.java)

0 commit comments

Comments
 (0)