Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 升级到RestEasy 4.5.x后的StackOverflower错误_Java_Jakarta Ee_Resteasy_Jetty 9 - Fatal编程技术网

Java 升级到RestEasy 4.5.x后的StackOverflower错误

Java 升级到RestEasy 4.5.x后的StackOverflower错误,java,jakarta-ee,resteasy,jetty-9,Java,Jakarta Ee,Resteasy,Jetty 9,从4.4.2升级到4.5.2后,当返回带有实体InputStream的响应时,我得到了一个StackOverflowerError。 返回基本10MB流失败 可以用非常基本的代码复制错误: @Path("/") public class TestResource { @GET @Produces(MediaType.APPLICATION_OCTET_STREAM) @Path("/{size}") public Response donwload(@PathP

从4.4.2升级到4.5.2后,当返回带有实体InputStream的响应时,我得到了一个
StackOverflowerError
。 返回基本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)
        ...

调试完您的问题后,我认为restEasy中没有问题。根本原因是默认JVM配置没有为堆栈分配足够的内存。如果您自己将JVM堆栈帧大小设置为大于10M,则不会发生错误

下面是我的想法。我为堆栈帧设置了16M

代码运行良好,可以下载


我报告了这个错误,并且它已经被解决了。

一个1TB的文件怎么样?需要定义1GB堆栈帧吗?@Lotfi根据代码,写操作在inputstream和outputstream中完成。你说这段代码在4.4.2中运行良好?对吗?如果是这样,我想我应该阅读第4.4.2版中的代码