2017-02-04 1 views
2

Seit Jersey 2.x LoggingFilter in der neuesten Version veraltet, gingen wir mit Jersey eigene Anfrage/Antwort-Protokollierung, zusammen mit Log4j2. Wir benutzen Springboot. Problem entsteht, wenn sie Web-Service mit POST-Methode treffen, es NegativJersey 2.x löst NegativeArraySizeException, wenn versuchen, für Non-GET-Anforderungen mit SpringBoot Logging-Anforderung

java.lang.NegativeArraySizeException 
    at org.glassfish.jersey.logging.LoggingInterceptor.logInboundEntity(LoggingInterceptor.java:210) ~[jersey-common-2.23.2.jar:?] 
    at org.glassfish.jersey.logging.ServerLoggingFilter.filter(ServerLoggingFilter.java:108) ~[jersey-common-2.23.2.jar:?] 
    at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) ~[jersey-server-2.23.2.jar:?] 
    at org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) ~[jersey-server-2.23.2.jar:?] 

Meine log4j2 Konfiguration wirft -

<!-- Jersey logger --> 
<AsyncLogger name="org.glassfish" level="all" additivity="false"> 
    <AppenderRef ref="Console" level="off" /> 
    <AppenderRef ref="RollingFileIO" level="all" /> 
</AsyncLogger> 

Wenn ich Holzset Ebene off, funktioniert alles einwandfrei. SpringBoot Version 1.4.3

Nur für eine sichere Überprüfung, kann ich eingehende Daten in Wireshark sehen.

Antwort

5

Ich habe die Antwort bekommen. Lassen Trikot die Protokollierung schreiben wir diese wurden registriert -

 jerseyConfig.register(
     new LoggingFeature(   
      java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), 
      java.util.logging.Level.SEVERE, 
      LoggingFeature.Verbosity.PAYLOAD_ANY, 
      Integer.MAX_VALUE) 
     ); 

Hier 4. param ist maxEntitySize, die Integer.MAX_VALUE ist. Beim Erstellen des Protokollierungspuffers initialisiert jersey das Array mit maxEntity + 1, das die Ausnahme verursacht hat.

Ich habe diesen Wert auf eine niedrigere/logische Zahl geändert, und die Dinge funktionieren gut.

Verwandte Themen