Почта клиента Джерси PUT InputStream "400 плохих запросов" - PullRequest
0 голосов
/ 31 августа 2018

В моем коде я пытаюсь итерировать n раз, собирая клиента и отправляя входной поток на удаленную конечную точку:

for (int i=0; i<=100; i ++) {                       
    Client client = Client.create();

    WebResource webResource = client.resource("https://endpoint/EndOfDayRapport/eof_" + System.currentTimeMillis());

    SPMResponse response5 = webResource
        .type("text/xml").put(SPMResponse.class,myInputStream);         
    System.out.println(response5);
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Входной поток содержит текст сообщения в формате xml. Я заметил, что на 1-я итерация ... запрос завершается 2-я итерация: ответ 400 неверных запросов ... 3-й 400 плохой запрос .... и так далее ...

если я изменю значение inputtream на string ... взяв реальный xml и отправив его методом PUT. 1-я итерация ... запрос завершается 2-я итерация ... запрос завершается 3-я итерация ... запрос завершается и так далее ...

В чем разница? почему он работает со строкой, а не с входным потоком? (кажется, что входной поток меняется после первой итерации) По производительности лучше использовать inputtream или string?

1 Ответ

0 голосов
/ 31 августа 2018

Пожалуйста, проверьте ваш входной поток. Мне кажется, что у вас есть следующая проблема: По первому запросу ваш входной поток находится в действительном состоянии с доступными данными По следующим запросам ваш поток уже в конце. Поэтому читать нечего, и вы отправляете пустые данные, которые джерси обрабатывает как «неверный запрос»

Поэтому попробуйте использовать входной поток, который вы можете перематывать и перематывать на каждой итерации цикла.

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

...