升级到RestEasy 4.5.x后的StackOverflowError >> [

问题描述 投票:1回答:1
[从4.4.2升级到4.5.2的RestEasy之后,在返回带有实体InputStream的响应时得到了StackOverflowError。返回基本的10MB流失败。

错误的可复制性非常基本的代码:

@Path("/") public class TestResource { @GET @Produces(MediaType.APPLICATION_OCTET_STREAM) @Path("/{size}") public Response donwload(@PathParam("size") long size) { return Response.ok(new NullInputStream(size)).build(); } }

正在请求:

localhost:8000/1000000 ==> OK localhost:8000/10000000 ==> StackOverflowError

我明白了:

org.eclipse.jetty.server.HttpChannelOverHttp.handleException(HttpChannelOverHttp.java:488) : java.lang.StackOverflowError: null at org.eclipse.jetty.util.BufferUtil.fill(BufferUtil.java:503) at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:791) at org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper$DeferredOutputStream.write(HttpServletResponseWrapper.java:153) at org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper$AsyncOperation.work(HttpServletResponseWrapper.java:41) at org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper$DeferredOutputStream.queue(HttpServletResponseWrapper.java:219) at org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper$DeferredOutputStream.asyncWrite(HttpServletResponseWrapper.java:180) at org.jboss.resteasy.util.CommitHeaderAsyncOutputStream.asyncWrite(CommitHeaderAsyncOutputStream.java:94) at org.jboss.resteasy.plugins.providers.ProviderHelper.writeTo(ProviderHelper.java:171) at org.jboss.resteasy.plugins.providers.ProviderHelper.lambda$writeTo$1(ProviderHelper.java:172) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) at org.jboss.resteasy.plugins.providers.ProviderHelper.writeTo(ProviderHelper.java:172) at org.jboss.resteasy.plugins.providers.ProviderHelper.lambda$writeTo$1(ProviderHelper.java:172) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) at org.jboss.resteasy.plugins.providers.ProviderHelper.writeTo(ProviderHelper.java:172) at org.jboss.resteasy.plugins.providers.ProviderHelper.lambda$writeTo$1(ProviderHelper.java:172) ... at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) at org.jboss.resteasy.plugins.providers.ProviderHelper.writeTo(ProviderHelper.java:172) at org.jboss.resteasy.plugins.providers.ProviderHelper.lambda$writeTo$1(ProviderHelper.java:172) ...

从4.4.2升级到RestEasy至4.5.2后,当返回带有实体InputStream的响应时,出现了StackOverflowError。返回基本的10MB流失败。具有非常...
java jakarta-ee resteasy jetty-9
1个回答
0
投票
调试您的问题后,我认为restEasy没有问题。根本原因是默认JVM配置不为堆栈分配足够的内存。如果您自己设置的JVM堆栈帧大小大于10M,则不会发生该错误。
© www.soinside.com 2019 - 2024. All rights reserved.