IllegalStateException: содержимое было использовано - как решить?

У меня есть следующий код:

HttpGet httpGet = new HttpGet(serverAdress + "/rootservices");
        httpGet.setHeader("Accept", "text/xml");
        HttpResponse response = client.execute(httpGet, localContext);

        String projectURL = XMLDocumentParser.parseDocument(response.getEntity().getContent(), "oslc_scm:scmServiceProviders", "rdf:resource");
        String workItemURL = XMLDocumentParser.parseDocument(response.getEntity().getContent(), "oslc_cm:cmServiceProviders", "rdf:resource");

Проблема в том, что я дважды прочитал объект HttpResponse. Поэтому во второй раз я получаю исключение. Но хотя я знаю проблему, я не могу найти легкого решения. Итак, что является хорошим способом решить эту проблему?

3 ответа

Решение

Прочитать поток ввода, возвращенный response.getEntity().getContent() в byte[]хранится в локальной переменной. См. Преобразование InputStream в байтовый массив в Java.

byte[] content = IOUtils.toByteArray(response.getEntity().getContent());

String projectURL = XMLDocumentParser.parseDocument(new ByteArrayInputStream(content), "oslc_scm:scmServiceProviders", "rdf:resource");
String workItemURL = XMLDocumentParser.parseDocument(new ByteArrayInputStream(content), "oslc_cm:cmServiceProviders", "rdf:resource");

Прочитайте содержимое ответа только один раз и скопируйте его в какой-нибудь буфер, совместимый с XMLDocumentParser.parseDocument, Затем анализируйте данные прямо из буфера столько раз, сколько захотите.

Почему бы тебе не попробовать это так?

HttpGet httpGet = new HttpGet(serverAdress + "/rootservices");
        httpGet.setHeader("Accept", "text/xml");
        InputStream in = null;
        HttpResponse response = client.execute(httpGet, localContext);

        in = response.getEntity().getContent();
        String projectURL = XMLDocumentParser.parseDocument(in, "oslc_scm:scmServiceProviders", "rdf:resource");
        String workItemURL = XMLDocumentParser.parseDocument(in, "oslc_cm:cmServiceProviders", "rdf:resource");
Другие вопросы по тегам