启用Jersey跟踪日志记录会导致MaxHeaderCountExceededException

时间:2016-09-09 11:25:14

标签: jersey jersey-2.0 java-ee-7 glassfish-4 payara

我正在尝试在Payara 162上调试我的球衣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)

在我的球衣我app我配置了跟踪:

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标头添加{i}}标头时,我在服务器日志中看到完整的跟踪信息请求,但后来我得到了例外。当我没有在请求中添加标题时,一切正常,但当然我没有得到跟踪。

我想知道是否有什么我可以改变来解决这个问题还是一个错误?

1 个答案:

答案 0 :(得分:1)

问题是跟踪会为每个事件添加header into the REST response

Grizzly对响应中的标头数量施加了限制。 默认情况下,Payara Server在响应中将100定义为maximum number of headers。您需要增加此数字以允许响应中的所有跟踪信息。

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

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

  

的asadmin>组   configs.config.server-config.network-config.protocols.protocol.http侦听器1.http.max响应报头= 1000

您可以使用类似的命令来设置所有Grizzly network listener propertiesoptions,只需将max-response-headers替换为您要设置的选项的名称,使用-作为单词分隔符而不是驼峰案例