2016-09-09 5 views
1

Ich versuche, meinen Jersey 2 App auf Payara 162 zu debuggen, aber bei jeder Anfrage, nachdem die Trace-Informationen gedruckt werden, bekomme ich diese Ausnahme und der Kunde erhält keine Antwort:Aktivieren Jersey Trace-Logging verursacht MaxHeaderCountExceededException

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) 

in meinem Trikot I I trace konfiguriert App als so:

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"); 
} 

}

ich den Logger in meinem logback.xml aktiviert ist (ich habe Payara konfiguriert logback verwenden), und ich sehe die vollständigen Ablaufverfolgungsinformationen in meinem Serverprotokoll, wenn ich es bei Bedarf aktiviere, indem ich den Header X-Jersey-Tracing-Accept zu meiner Anfrage hinzufüge, aber dann bekomme ich die Ausnahme. Wenn ich den Header nicht zur Anfrage hinzufüge, funktioniert alles, aber natürlich bekomme ich den Trace nicht.

Ich frage mich, ob es etwas gibt, das ich ändern kann, um das zu beheben, oder ist es ein Fehler?

Antwort

1

Das Problem ist, dass die Ablaufverfolgung fügt ein header into the REST response für jedes Ereignis hinzu.

Grizzly begrenzt die Anzahl der Header in der Antwort. Payara Server definiert standardmäßig 100 als maximum number of headers in der Antwort. Sie müssen diese Anzahl erhöhen, um alle Tracing-Informationen in der Antwort zuzulassen.

Um eine höhere Anzahl für die maximale Anzahl von Headern festzulegen, müssen Sie asadmin verwenden. Es gibt keine Möglichkeit, dies in der GUI-Admin-Konsole einzustellen, es fehlt auf dem Bildschirm, um das HTTP-Protokoll zu konfigurieren.

Wenn Ihre Konfiguration server-config benannt ist und die Netzwerk-Listener ist http-listener-1, dann den folgenden Befehl asadmin führen Sie es bis 1000 zu setzen:

asadmin> set configs.config.server-config.network-config .protocols.protocol.http-Hörer-1.http.max-Response-Header = 1000

Sie können einen ähnlichen Befehl verwenden, um alle Grizzly network listener propertiesoptions zu setzen, ersetzen Sie einfach max-response-headers auf den Namen der Option, die Sie einstellen möchten mit - als Worttrennzeichen anstelle von Kamelkasten.

+0

danke @OndrejM, ich werde es versuchen, obwohl ich ziemlich sicher bin die Anzahl der Header ist in einzelnen Zahlen, so Hinzufügen von 1 mehr würde es nicht nahe an 100 bringen. –

+0

ja, es hat funktioniert! Ich habe deine Antwort missverstanden, ich dachte, du meintest, dass es einen Header zur Antwort hinzufügen würde, aber es fügt einen Header "pro Event" hinzu, der in der Tat viele und viele zusätzliche Header enthält, deshalb ging es über 100. Danke! –