-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Closed
Description
I'm still running into issues with java.lang.IllegalArgumentException: Called operation not supported for TokenBuffer exception using objectMapper.valueToTree<JsonNode>(...) with a serializer that invokes JsonGenerator.writeRaw. Jackson databind version 2.9.6
According to 348 and 743 this should be working?
Exception is as follows:
java.lang.IllegalArgumentException: Called operation not supported for TokenBuffer
at com.fasterxml.jackson.databind.ObjectMapper.valueToTree(ObjectMapper.java:2802)
at foo.JacksonSerializerTest.testJsonNode(JacksonSerializerTest.kt:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Called operation not supported for TokenBuffer
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._wrapAsIOE(DefaultSerializerProvider.java:509)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:482)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2655)
at com.fasterxml.jackson.databind.ObjectMapper.valueToTree(ObjectMapper.java:2797)
... 23 more
Caused by: java.lang.UnsupportedOperationException: Called operation not supported for TokenBuffer
at com.fasterxml.jackson.databind.util.TokenBuffer._reportUnsupportedOperation(TokenBuffer.java:1217)
at com.fasterxml.jackson.databind.util.TokenBuffer.writeRaw(TokenBuffer.java:775)
at fooTestSerializer.serialize(JacksonSerializerTest.kt:40)
at foo.TestSerializer.serialize(JacksonSerializerTest.kt:38)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
... 26 more
Self-contained unit test showing issue (kotlin):
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.databind.ser.std.StdSerializer
import org.junit.Test
class JacksonSerializerTest {
private val objectMapper: ObjectMapper = ObjectMapper()
@Test
fun testSerialize() {
val foo = Foo("JSON!")
// This works great
val json: String = objectMapper.writeValueAsString(foo)
}
@Test
fun testJsonNode() {
val foo = Foo("JSON!")
// UnsupportedOperationException is thrown here
val node: JsonNode = objectMapper.valueToTree<JsonNode>(foo)
}
@Test
fun testJsonNode2() {
val foo = Foo("JSON!")
val json = objectMapper.writeValueAsString(foo)
// This works great
val node: JsonNode = objectMapper.readTree(json)
}
}
class TestSerializer : StdSerializer<Foo>(Foo::class.java) {
override fun serialize(value: Foo, gen: JsonGenerator, provider: SerializerProvider) =
gen.writeRaw("""
{ "Bar" : "${value.Bar}", "Bonus": "Foo" }
""".trimIndent())
}
@JsonSerialize(using = TestSerializer::class)
data class Foo(val Bar: String)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels