J'essaie d'envoyer une requête post vers une url à l'aide de HttpURLConnection (pour l'utilisation de cUrl en java). Le contenu de la demande est le xml et le point de fin, le processus de demande xml et stocke un enregistrement de la base de données et renvoie une réponse en forme de chaîne de caractères xml. L'application est hébergée sur un serveur apache-tomcat localement.
Lorsque j'exécute ce code à partir du terminal, une ligne est ajoutée à la db comme prévu. Mais une exception est levée comme suit lors de l'obtention de l'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();
}
}
}
Sa confusion, car l'exception est tracé pour la ligne InputStream response = con.getInputStream();
et il ne semble pas être n'importe quel fichier d'un FileNotFoundException.
Lorsque j'essaie d'ouvrir une connexion à un fichier xml directement, il ne jette pas cette exception.
Le service app utilise le framework spring et Jaxb2Marshaller pour créer le fichier xml de réponse.
La classe ReadWriteTextFile est prise à partir d' ici
Merci.
Edit: Eh bien, il enregistre les données dans la base de données et renvoie une erreur 404 code d'état de réponse en même temps.
J'ai aussi essayé de faire une boucle à l'aide de php et d'imprimer l' CURLINFO_HTTP_CODE
qui s'avère être 200.
Des idées sur comment dois-je aller sur le débogage ? À la fois le service et le client sont sur le serveur local.
Résolu: J'ai pu résoudre le problème après avoir fait référence à une réponse sur tant de lui-même.
Il semble HttpURLConnection renvoie toujours la réponse 404 lors de la connexion à une url avec un port non standard.
L'ajout de ces lignes résolu
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");