2017-02-04 6 views
2

Поскольку Jersey 2.x не признавал LoggingFilter в последнем выпуске, мы пошли вперед с собственным журналом запроса/ответа Джерси вместе с log4j2. Мы используем springboot. Проблема возникает тогда, когда мы попали веб-службы с помощью метода POST, он бросает NegativeArraySizeExceptionДжерси 2.x выбрасывает NegativeArraySizeException при попытке выполнить запрос на ведение журнала, для запросов, не связанных с GET, с SpringBoot

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:?] 

Моя конфигурация log4j2 -

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

Если я установить уровень журналирования в off, все работает отлично. Версия SpringBoot 1.4.3

Просто для безопасной проверки, я могу видеть поступающие данные в Wireshark.

ответ

5

У меня есть ответ. Для того, чтобы написать джерси вырубку, мы регистрировали это -

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

Здесь четвёртые пары являются maxEntitySize, который Integer.MAX_VALUE. Таким образом, создавая буфер регистрации, трикотаж является инициализирующим массивом с maxEntity + 1, что и вызывает исключение.

Я изменил это значение на некоторый нижний/логический номер, и все работает нормально.