Регистрация полезных данных в LoggingInInterceptor - PullRequest
0 голосов
/ 06 июня 2018

Я использую сервисы CXF REST для соединения двух приложений.Я передаю список объектов в другое приложение в запросе POST.Я понял, что если размер списка больше 30 000, то с другой стороны получено только 29998 элементов списка.Я просто хотел подтвердить, правда ли это, поэтому я начал копаться в коде регистрации CXF.Класс LoggingOutInterceptor регистрирует полезную нагрузку, которая по умолчанию ограничена 102400 байтами, поэтому я могу переопределить ее и увидеть полезную нагрузку на отправляющей стороне.

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

Есть ли лучший способ для регистрации данных, отправленных в теле запроса на принимающей стороне.Любые предложения приветствуются!

1 Ответ

0 голосов
/ 09 июля 2018

Я выяснил, что проверка была в нашем коде в конфигурации соединителя перед запуском tomcat.У HTTP нет такой проверки лимита, кроме ограничения максимального размера запроса POST.

private final Tomcat tomcat = new Tomcat();
Connector connector = tomcat.getConnector();
connector.setMaxParameterCount(30000);

В моем запросе на публикацию было всего 3 параметра, как показано ниже.Теперь, поскольку максимальные параметры 30000, только первые 2 параметра и 29998 из третьего были переданы по проводам.

Чтобы исправить эту проблему, я изменил API, чтобы принимать JSON вместо параметров формы.Объект JSON является одним параметром, поэтому максимальное количество параметров не нарушается.Вот как выглядит мой старый и новый API

old API:

@POST
@Path("/create")
public void create(@FormParam("id") long id, @FormParam("date") LocalDate date, @FormParam("oldPkeys") List<Long> oldPkeys, @FormParam("newPkeys") List<Long> newPkeys);

new One:

@POST
@Path("/createElements")
@Consumes(APPLICATION_JSON)
public void createElements(@QueryParam("id") long id, @QueryParam("date") LocalDate date, MyJSONObject pKeys);

MyJSONObject - это пользовательский объект, который содержит oldPkeys и новые Pkeys

...