Jersey 启用跟踪日志记录会导致MaxHeaderCountExceedeDexException异常

Jersey 启用跟踪日志记录会导致MaxHeaderCountExceedeDexException异常,jersey,jersey-2.0,java-ee-7,glassfish-4,payara,Jersey,Jersey 2.0,Java Ee 7,Glassfish 4,Payara,我试图在Payara 162上调试jersey 2应用程序,但在每次请求时,在打印跟踪信息后,我都会收到此异常,而客户端没有收到响应: org.glassfish.grizzly.http.util.MimeHeaders$MaxHeaderCountExceededException: Illegal attempt to exceed the configured maximum number of headers: 100 at org.glassfish.grizzly.http.uti

我试图在Payara 162上调试jersey 2应用程序,但在每次请求时,在打印跟踪信息后,我都会收到此异常,而客户端没有收到响应:

org.glassfish.grizzly.http.util.MimeHeaders$MaxHeaderCountExceededException: Illegal attempt to exceed the configured maximum number of headers: 100
at org.glassfish.grizzly.http.util.MimeHeaders.createHeader(MimeHeaders.java:396)
at org.glassfish.grizzly.http.util.MimeHeaders.addValue(MimeHeaders.java:422)
at org.glassfish.grizzly.http.HttpHeader.addHeader(HttpHeader.java:707)
at org.glassfish.grizzly.http.server.Response.addHeader(Response.java:1177)
at org.apache.catalina.connector.Response.addHeader(Response.java:1221)
at org.apache.catalina.connector.ResponseFacade.addHeader(ResponseFacade.java:579)
at org.glassfish.jersey.servlet.internal.ResponseWriter.writeResponseStatusAndHeaders(ResponseWriter.java:165)
at org.glassfish.jersey.server.ServerRuntime$Responder$1.getOutputStream(ServerRuntime.java:701)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200)
at org.glassfish.jersey.message.internal.CommittingOutputStream.flushBuffer(CommittingOutputStream.java:305)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:261)
at org.glassfish.jersey.message.internal.CommittingOutputStream.close(CommittingOutputStream.java:276)
at org.glassfish.jersey.message.internal.OutboundMessageContext.close(OutboundMessageContext.java:839)
at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:412)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:784)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434)
at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
在我的jersey I应用程序中,我将跟踪配置为:

public class RestApplication extends ResourceConfig {

public RestApplication() {
    super();
    packages(true, "com.example");
    register(JacksonFeature.class);
    register(JsonProvider.class);
    register(RolesAllowedDynamicFeature.class);

    property("jersey.config.server.tracing.type", "ON_DEMAND");
    property("jersey.config.server.tracing.threshold", "VERBOSE");
}
}

我在我的logback.xml中启用了记录器(我已将Payara配置为使用logback),当我通过向请求中添加
X-Jersey-Tracing-Accept
头来按需启用时,我在服务器日志中看到了完整的跟踪信息,但随后我得到了异常。当我没有将头添加到请求中时,一切都正常,但我当然没有得到跟踪


我想知道是否有什么我可以改变来修复这个问题,还是它是一个bug?

问题是跟踪为每个事件添加了一个错误

Grizzly对响应中的头数施加了限制。 Payara Server默认将100定义为响应中的最大头数。您需要增加此数字以允许响应中包含所有跟踪信息

要为最大页眉数设置更高的数字,需要使用asadmin。在GUI管理控制台中没有设置此选项,配置HTTP协议的屏幕中缺少此选项

如果您的配置名为
server config
,网络侦听器名为
http-listener-1
,则执行以下asadmin命令将其设置为1000:

asadmin>set configs.config.server config.network config.protocols.protocol.http-listener-1.http.max response headers=1000


您可以使用类似的命令来设置全部,只需将
max response headers
替换为您要设置的选项的名称,使用
-
作为单词分隔符,而不是驼峰大小写。

谢谢@OndrejM,我会尝试,尽管我很确定标题的数量是一位数,所以再加一个不会使它接近100。是的,它起作用了!我误解了你的回答,我以为你的意思是会在回复中添加一个标题,但它会在“每个事件”中添加一个标题,这实际上是很多很多额外的标题,这就是为什么它会超过100个。谢谢