1

我正在尝试在 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)

在我的球衣中,我应用我这样配置跟踪:

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,但随后我得到了异常. 当我不将标头添加到请求时,一切正常,但当然我没有得到跟踪。

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

4

1 回答 1

1

问题是跟踪会在每个事件的 REST 响应中添加一个标头。

Grizzly 对响应中的标头数量施加了限制。maximum number of headersPayara 服务器默认在响应中定义 100 。您需要增加此数字以允许响应中的所有跟踪信息。

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

如果你的配置被命名server-config并且网络监听器是http-listener-1,那么执行以下 asadmin 命令将其设置为 1000:

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

您可以使用类似的命令设置所有Grizzly 网络侦听器属性选项,只需替换max-response-headers为您要设置的选项的名称,-用作单词分隔符而不是驼峰式大小写。

于 2016-09-10T13:39:06.893 回答