При выполнении запроса POST к серверу, и я вызываю readEntity, я получаю сообщение об ошибке «Преждевременное завершение тела сообщения с разделителями-длинами (ожидается: 349; получено: 0)».
Сначала я думал, что сервер возвращает мне 0 байтов, но при отправке того же запроса через почтальона, возвращение происходит правильно. Я также перехватил сетевые пакеты с помощью WireShark, и в пакетах я увидел, что заголовок находится в одном пакете, а тело - в другом. Я не знаю, будет ли это проблемой. Еще одна вещь, которую я заметил, заключается в том, что соединение прерывается с помощью RST, как показано ниже:
https://i.ibb.co/MSGhHJM/Wire-Shark.png
Ниже приведены фрагменты кода, где строка, в которой возникает ошибка: params = post.readEntity(HashMap.class);
Импорт класса конфигурации:
import com.google.inject.Inject;
import org.jose4j.json.internal.json_simple.JSONArray;
import javax.ws.rs.core.Response;
import java.util.HashMap;
Класс конфигурации:
public void configure(SchedulerModule module, SessionInfo session) {
Response post = connection.post(session, ServiceURL.CONFIG_URL, new JSONArray());
params = post.readEntity(HashMap.class); // Linha que o erro ocorre
if ("R".equals(params.get("IE_TIPO")) && validaInteger(params.get("QT_INTERVALO")) > 0) {
module.setDelay(validaInteger(params.get("QT_INTERVALO")));
module.setRate(validaInteger(params.get("QT_INTERVALO")));
isRun = true;
} else {
isRun = false;
}
}
Импорт класса подключения:
import com.google.inject.Inject;
import com.google.inject.name.Named;
import org.jose4j.json.internal.json_simple.JSONArray;
import org.jose4j.json.internal.json_simple.JSONObject;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.stream.Collectors;
Метод класса подключения:
public Response post(SessionInfo sessionInfo, ServiceURL url, JSONArray array) {
Client client = ClientBuilder.newClient();
try {
Invocation.Builder builder = client.target(backendUrl).path(url.getUrl())
.request(MediaType.APPLICATION_JSON_TYPE)
.header("idSessao", sessionInfo.getIdSessao())
.header("crsfToken", sessionInfo.getCrsfToken())
.header("Cookie", sessionInfo.getCookieHeader());
return builder.post(Entity.entity(array == null ? "[]" : array.toString(), MediaType.APPLICATION_JSON_TYPE));
} catch (Exception e) {
System.out.println("Failure" + e.getMessage());
} finally {
client.close();
}
return null;
}
Мне нужно получить тело возврата этого запроса. Вы можете мне помочь?