J'essaie d'envoyer une demande de publication à une URL en utilisant HttpURLConnection (pour utiliser cUrl en java). Le contenu de la demande est xml et au point final, l'application traite le xml et stocke un enregistrement dans la base de données, puis renvoie une réponse sous forme de chaîne xml. L'application est hébergée localement sur apache-tomcat.
Lorsque j'exécute ce code à partir du terminal, une ligne est ajoutée à la base de données comme prévu. Mais une exception est levée comme suit lors de l'obtention du InputStream à partir de la connexion
java.io.FileNotFoundException: http://localhost:8080/myapp/service/generate
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)
at org.kodeplay.helloworld.HttpCurl.main(HttpCurl.java:30)
Voici le code
public class HttpCurl {
public static void main(String [] args) {
HttpURLConnection con;
try {
con = (HttpURLConnection) new URL("http://localhost:8080/myapp/service/generate").openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
File xmlFile = new File("test.xml");
String xml = ReadWriteTextFile.getContents(xmlFile);
con.getOutputStream().write(xml.getBytes("UTF-8"));
InputStream response = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
for (String line ; (line = reader.readLine()) != null;) {
System.out.println(line);
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
C'est déroutant car l'exception est tracée jusqu'à la ligne InputStream response = con.getInputStream();
et il ne semble pas y avoir de fichier impliqué pour une FileNotFoundException.
Lorsque j'essaye d'ouvrir directement une connexion à un fichier xml, cela ne lève pas cette exception.
L'application de service utilise Spring Framework et Jaxb2Marshaller pour créer la réponse xml.
La classe ReadWriteTextFile est tirée d' ici
Merci.
Edit: Eh bien, il enregistre les données dans le DB et renvoie un code d'état de réponse 404 en même temps.
J'ai également essayé de faire une boucle en utilisant php et d'imprimer le CURLINFO_HTTP_CODE
qui s'avère être 200.
Des idées sur la façon de déboguer cela? Le service et le client se trouvent sur le serveur local.
Résolu: je pourrais résoudre le problème après avoir fait référence à une réponse sur SO lui-même.
Il semble que HttpURLConnection renvoie toujours une réponse 404 lors de la connexion à une URL avec un port non standard.
L'ajout de ces lignes l'a résolu
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");