Exception étrange avec HttpURLConnection

Exception étrange avec HttpURLConnection - Java - Programmation

Marsh Posté le 07-12-2004 à 15:06:17    

Voir le code ci-dessous. Le problème est que si je fais un connexion.getContent(), la méthode getResponseCode() qui se trouve au dessus lève une exception alors que si le getContent() est mis en commentaire, aucune exception n'est levée..
 

Code :
  1. import java.io.IOException;
  2. import java.net.HttpURLConnection;
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5. public class TestExceptionEtrange {
  6.   public static void main(String[] args) {
  7.     URL monUrl = null;
  8.     try {
  9.       monUrl = new URL("http://localhost:8080/cheminInvalide/" );
  10.       HttpURLConnection connexion = (HttpURLConnection) monUrl.openConnection();
  11.       connexion.connect();
  12.       System.out.println("Code Retour : " +connexion.getResponseCode());
  13.       System.out.println("Message :" + connexion.getResponseMessage());
  14.       // si la ligne suivante n'est pas en commentaire ça plante
  15.       //  de façon étrange !!!!
  16.       //connexion.getContent();
  17.     } catch (MalformedURLException e) {
  18.       e.printStackTrace();
  19.     } catch (IOException e) {
  20.       e.printStackTrace();
  21.     }
  22.   }
  23. }


 
Voici la trace de l'exception :

Code :
  1. Code Retour : 404
  2. Message :Introuvable
  3. java.io.FileNotFoundException: http://localhost:8080/cheminInvalide/
  4. at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:707)
  5. at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:238)
  6. at trash.TestExceptionEtrange.main(TestExceptionEtrange.java:25)


 
J'imagine qu'en fait c'est la méthode getContent() qui lève une exception mais dans ce cas, pourquoi dans la trace, ça me dit que c'est getresponseCode() ?  :??:  :??:  :??:

Reply

Marsh Posté le 07-12-2004 à 15:06:17   

Reply

Marsh Posté le 07-12-2004 à 16:11:20    

J'ai essayé ton programme chez moi, et en tout logique, ça plante sur "connect", puisque le chemin n'est pas valide. Il devrait en être de même chez toi.
 
Inversément, si je donne un chemin valide, tout marche ok, y compris le getContent.
 
TestExceptionEtrange.java:25 -> à quoi correspond la ligne 25 chez toi ?
 
Tu es sûr de ne pas t'être emmelé les pinceaux, des fois ?  :heink:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-12-2004 à 16:11:29    

Après quelques recherches sur le net, il semble pour récupérér le corps de la réponse getContent() n'est pas à conseiller, il vaut mieux récupérer l'InputStream par getInputStream() et le lire.
 
PS : Ca contourne mon problème mais juste par curiosité j'aimerais comprendre pourquoi l'exception que je récupérais était incohérente...
Le mystère reste entier

Reply

Marsh Posté le 07-12-2004 à 16:24:41    

sircam a écrit :

J'ai essayé ton programme chez moi, et en tout logique, ça plante sur "connect", puisque le chemin n'est pas valide. Il devrait en être de même chez toi.
 
Inversément, si je donne un chemin valide, tout marche ok, y compris le getContent.
 
TestExceptionEtrange.java:25 -> à quoi correspond la ligne 25 chez toi ?
 
Tu es sûr de ne pas t'être emmelé les pinceaux, des fois ?  :heink:


 
J'avais oublié de préciser qu'il faut avoir un serveur d'appli en état de marche qui écoute le port 8080 (Tomcat par exemple).
 
TestExceptionEtrange.java:25 => ça correspond bien à l'appel de la méthode 'connexion.getResponseCode()'
Si il y a un décalage entre les numéros de lignes c'est que je n'ai pas copié les commentaires qu'il y a en début de mon fichier
 
pour rester cohérent voici la nouvelle trace d'execution :

Code :
  1. Code Retour : 404
  2. Message :Introuvable
  3. java.io.FileNotFoundException: http://localhost:8080/cheminInvalide/
  4. at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:707)
  5. at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:238)
  6. at trash.TestExceptionEtrange.main(TestExceptionEtrange.java:17)

Reply

Marsh Posté le 07-12-2004 à 18:57:09    

Ba en même temps tu tentes un getContent() sur une réponse HTTP qui n'en a pas (de content), donc déjà, ça part mal [:spamafote]
Ensuite, dans la javadoc de getContent(), tu tombes sur " This method first determines the content type of the object by calling the getContentType method."
Ba pour une 404, je sais pas hein, mais ça m'étonnerait qu'il y ait un champ Content-Type dans le header HTTP.
De toute façon, j'ai pas la RFC de HTTP sous les yeux, mais ça m'étonnerait qu'il y ait un contenu ou un champ Content-Type dans une réponse serveur autre que 200.
 
Bref, vérifie dans la RFC ou dans un tuto HTTP quelque part et n'appelle getContent() que lorsque tu es certain d'avoir un contenu.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 08-12-2004 à 15:50:15    

Le problème, c'est pas qu'il y ait une exception mais que l'exception reçue est incohérente.
 
On dirait que getResponseCode() ne lève une exception que si on fait un getContent() après...

Reply

Marsh Posté le 08-12-2004 à 17:57:35    

chez moi ca fait un FileNotFoundException même sans faire le getContent ...
 
bizarre, bizarre ...


Message édité par benou le 08-12-2004 à 17:57:48
Reply

Marsh Posté le 08-12-2004 à 18:42:06    

Bon, comme personne n'arrive à reproduire le problème, j'imagine que c'est mon PC qui a mis un pied dans la 4ème dimension je ce n'est plus la peine de chercher à le comprendre :pt1cable:  
 
De toute façon, comme je l'ai dis dans mon 2ème post, j'ai fait en sorte de ne jamais tomber sur cette erreur.
 
On va dire que mon problème est "résolu" ...
 
Merci à tous pour vos efforts  :D


Message édité par Bidem le 08-12-2004 à 18:42:31
Reply

Marsh Posté le 08-12-2004 à 23:17:39    

bidem a écrit :

Bon, comme personne n'arrive à reproduire le problème, j'imagine que c'est mon PC qui a mis un pied dans la 4ème dimension


perso, je trouve le comportement de ton prog sur mon pc assez étrange aussi : je vois pas pourquoi j eme mange une exceptino alors que j'essaye juste d elire le code d'une réponse http 404 ...
 
De toute façon, en générale, j'évite d'utiliser les HttpUrlConenction ... y a des clients HTTP bien mieux fait ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed