2016-11-28 1 views
0

Je rencontre le problème this mais je ne sais pas exactement si.Impossible d'écrire la sortie après avoir lu l'entrée; Expérimentant cela mais pas certain de cause

J'ai découvert Cannot write output after reading input dans les journaux et, par ce qui précède, je crois que cela se produit en raison d'un getResponseCode() suivi d'un getOutputStream().

Est-ce que ce serait la cause de l'erreur enregistrée que je vois?

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

if(conn.getResponseCode() == 0){ 
    logger.debug("Success"); 
} else {     
    logger.debug("Time out set for 30 seconds"); 
} 
String input = writer.getBuffer().toString(); 
OutputStream os = conn.getOutputStream(); 
os.write(input.getBytes()); 
+0

Où est votre code? Pouvez-vous poster un extrait autour des lignes qui lancent cette erreur? –

Répondre

0

Le code suivant

StringWriter writer = new StringWriter(); 

String pushURL = "Your URL"; 

URL url = new URL(pushURL); 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setDoOutput(true); 

conn.setRequestMethod("POST"); 

conn.setRequestProperty("Content-Type", "application/restService"); 

conn.setConnectTimeout(30000); 

conn.setReadTimeout(30000); 

if(conn.getResponseCode() == 0){ 
    logger.debug("Success"); 
} else {     
logger.debug("Time out set for 30 seconds"); 
} 

String input = writer.getBuffer().toString(); 

OutputStream os = conn.getOutputStream(); 

os.write(input.getBytes()); 

os.flush(); 

se traduira par une java.net.ProtocolException en raison de ce qui suit situé here:

Le protocole HTTP est basé sur un modèle de demande-réponse: vous envoyez votre demande d'abord et le serveur répond. Une fois que le serveur a répondu, vous ne pouvez plus envoyer de contenu, cela n'aurait aucun sens. (Comment le serveur peut-il vous donner un code de réponse avant qu'il ne sache ce que vous essayez d'envoyer?)

Lorsque vous appelez server.getResponseCode(), vous indiquez au serveur que votre requête est terminée et peut le traiter. Si vous voulez envoyer plus de données, vous devez lancer une nouvelle requête.

Ainsi, l'OP appelle conn.getOutputStream(); après conn.getResponseCode() qui génère les java.net.ProtocolException dont Exception.getMessages() rendements

Impossible d'écrire la sortie après lecture de l'entrée