java.io.IOException: Tentative de lecture de flux fermé
Je fais un HTTPPost appel à l'aide de Client HTTP Apache et puis je suis en train de créer un objet à partir de la réponse à l'aide de Jackson.
Voici mon code:
private static final Logger log = Logger.getLogger(ReportingAPICall.class);
ObjectMapper mapper = new ObjectMapper();
public void makePublisherApiCall(String jsonRequest)
{
String url = ReaderUtility.readPropertyFile().getProperty("hosturl");
DefaultHttpClient client = new DefaultHttpClient();
try {
HttpPost postRequest = new HttpPost(url);
StringEntity entity = new StringEntity(jsonRequest);
postRequest.addHeader("content-type", "application/json");
log.info("pub id :"+ExcelReader.publisherId);
postRequest.addHeader("accountId", ExcelReader.publisherId);
postRequest.setEntity(entity);
HttpResponse postResponse = client.execute(postRequest);
log.info(EntityUtils.toString(postResponse.getEntity()));
// Response<PublisherReportResponse> response = mapper.readValue(postResponse.getEntity().getContent(), Response.class);
// log.info("Reponse "+response.toString());
} catch (UnsupportedEncodingException ex) {
log.error(ex.getMessage());
log.error(ex);
Assert.assertTrue(false, "Exception : UnsupportedEncodingException");
} catch (ClientProtocolException ex) {
log.error(ex.getMessage());
log.error(ex);
Assert.assertTrue(false, "Exception : ClientProtocolException");
} catch (IOException ex) {
log.error(ex.getMessage());
log.error(ex);
Assert.assertTrue(false, "Exception : IOException");
}
Méthode makePublisherApiCall() sera appelée dans une boucle qui s'exécute pour le dire 100 fois.
Fondamentalement, le problème survient quand je dé-commenter la ligne:
// Response<PublisherReportResponse> response = mapper.readValue(postResponse.getEntity().getContent(), Response.class);
// log.info("Reponse "+response.toString());
Après décommentant je suis arriver exception:
Attempted read from closed stream.
17:26:59,384 ERROR com.inmobi.reporting.automation.reportingmanager.ReportingAPICall - java.io.IOException: Attempted read from closed stream.
Sinon il fonctionne très bien.
Quelqu'un pourrait s'il vous plaît laissez-moi savoir ce que je fais de mal.
OriginalL'auteur Pratik | 2013-09-05
Vous devez vous connecter pour publier un commentaire.
Ce n'
EntityUtils.toString(postResponse.getEntity())
faire avec l'entité de réponse? Je soupçonne qu'il s'agit de la consommation de l'entité flux de contenu. Le HttpClient javadoc unis, que seules les entités, qui sont reproductibles peut être consommé plus d'une fois. Par conséquent, si l'entité n'est pas reproductible vous ne pouvez pas nourrir le flux de contenu pour le mappeur de nouveau. Pour éviter cela, vous ne devriez laisser le mappeur de consommer du ruisseau - si l'enregistrement du contenu, journal de l'analyse de la Réponse de l'objet.Ouais, bien sûr. Si je suis correct, le problème est que vous ne pouvez une fois de consommer le contenu de l'entité. Je soupçonne que vous le faites deux fois par le biais de l'enregistrement, puis l'analyse. Si vous souhaitez vérifier si mon soupçon est correct, commentez
log.info(EntityUtils.toString(postResponse.getEntity()));
et décommentez les deux lignes suivantes, puis vérifier si cela fonctionne.Grâce Pyranja. Qui a résolu le problème
OriginalL'auteur Pyranja
J'ai eu le même problème. Assurez-vous de ne pas consommer de l'entité flux de contenu dans le "watch" ou "inspecter" section de votre IDE. Il est fermé après c'est consommée (lire).
Et désolé pour mon anglais.
OriginalL'auteur august0490
J'ai eu le même problème.
L'idée est que si vous consommez de la postResponse, alors vous devriez le mettre dans une variable pour l'utiliser de nouveau dans des endroits différents.
Autre chose, la connexion est fermée et vous ne pouvez plus utiliser la même réponse encore.
J'ai utilisé pour se connecter (à des fins de débogage) et échoue toujours.
OriginalL'auteur Rami Sharaiyri
Je ne pense pas que ce problème est lié à la Réponse à la
Je reçois cette question parce que je n'ai pas utiliser
closeableresponce=client.Getmethod(FinalUrl);
Dans mon premier Test1, il était fait mention, mais quand j'ai raté dans Test2, j'ai oublié de mettre ce code c'est pourquoi stream fermé affiche un message d'...
OriginalL'auteur lokesh sharma