Skip to content

buffer: write(String str, int off, int len) doesn't work #3434

@ogrammer

Description

@ogrammer

I was previously using jooby 3.0.7, after updating to 3.1.0 various problems have appeared. I have also tried 3.1.1 before reverting to 3.0.7. There is a problem with the Gson module and the new DataBuffer, that for some things just does not work and for others it produces incorrect JSON serialization. Here is the error for when it does not work at all:

java.lang.IndexOutOfBoundsException: null
        at java.base/java.nio.CharBuffer.wrap(CharBuffer.java:544)
        at io.jooby.buffer.DataBufferWriter.write(DataBufferWriter.java:51)
        at com.google.gson.stream.JsonWriter.string(JsonWriter.java:764)
        at com.google.gson.stream.JsonWriter.value(JsonWriter.java:524)
        at com.google.gson.internal.bind.TypeAdapters$15.write(TypeAdapters.java:476)
        at com.google.gson.internal.bind.TypeAdapters$15.write(TypeAdapters.java:459)
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$2.write(ReflectiveTypeAdapterFactory.java:247)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:490)
        at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:184)
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:73)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:99)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:59)
        at com.google.gson.Gson.toJson(Gson.java:944)
        at com.google.gson.Gson.toJson(Gson.java:899)
        at com.google.gson.Gson.toJson(Gson.java:870)
        at io.jooby.gson.GsonModule.encode(GsonModule.java:115)
        at io.jooby.internal.HttpMessageEncoder.encode(HttpMessageEncoder.java:107)
        at io.jooby.DefaultContext.render(DefaultContext.java:467)
        at io.jooby.internal.handler.DefaultHandler.lambda$apply$e67b40fd$1(DefaultHandler.java:25)
        at io.jooby.Route$Filter.lambda$then$e67b40fd$1(Route.java:91)
        at io.jooby.internal.handler.WorkerHandler.lambda$apply$0(WorkerHandler.java:22)
        at io.jooby.internal.jetty.JettyContext.dispatch(JettyContext.java:344)
        at io.jooby.internal.jetty.JettyContext.dispatch(JettyContext.java:338)
        at io.jooby.internal.handler.WorkerHandler.lambda$apply$e67b40fd$1(WorkerHandler.java:19)
        at io.jooby.Route$Filter.lambda$then$e67b40fd$1(Route.java:91)
        at io.jooby.internal.RouterMatch.execute(RouterMatch.java:92)
        at io.jooby.Router$Match.execute(Router.java:76)
        at io.jooby.internal.jetty.JettyHandler.handle(JettyHandler.java:37)
        at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:851)
        at org.eclipse.jetty.server.Server.handle(Server.java:179)
        at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:635)
        at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:411)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
        at org.eclipse.jetty.io.ssl.SslConnection$SslEndPoint.onFillable(SslConnection.java:574)
        at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:390)
        at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:150)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)
        at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
        at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)
        at java.base/java.lang.Thread.run(Thread.java:1583)

Maybe the fix for this will fix the issue with incorrect serialization too

No problems: 3.0.7 and 3.0.9

Broken: 3.1.0 and 3.1.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions