Saya mencoba mengirim permintaan posting ke url menggunakan HttpURLConnection (untuk menggunakan cUrl di java). Isi permintaannya adalah xml dan pada titik akhir, aplikasi memproses xml dan menyimpan record ke database dan kemudian mengirimkan kembali respon dalam bentuk string xml. Aplikasi dihosting di apache-tomcat secara lokal.
Ketika saya menjalankan kode ini dari terminal, baris akan ditambahkan ke db seperti yang diharapkan. Tapi pengecualian dilemparkan sebagai berikut saat mendapatkan InputStream dari koneksi
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)
Ini kodenya
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();
}
}
}
Ini membingungkan karena pengecualian dilacak ke baris InputStream response = con.getInputStream();
dan sepertinya tidak ada file yang terlibat untuk FileNotFoundException.
Saat saya mencoba membuka koneksi ke file xml secara langsung, pengecualian ini tidak muncul.
Aplikasi layanan menggunakan framework spring dan Jaxb2Marshaller untuk membuat xml respons.
Kelas ReadWriteTextFile diambil dari sini
Terima kasih.
Sunting: Ini menyimpan data dalam DB dan mengirimkan kembali kode status respons 404 pada saat yang sama.
Saya juga mencoba melakukan curl menggunakan php dan mencetak CURLINFO_HTTP_CODE
yang ternyata 200.
Ada ide tentang bagaimana cara men-debug ini? Baik layanan dan klien berada di server lokal.
Terselesaikan: Saya bisa menyelesaikan masalah setelah mengacu pada jawaban di SO itu sendiri.
Tampaknya HttpURLConnection selalu mengembalikan respons 404 saat menyambungkan ke url dengan port non standar.
Menambahkan garis-garis ini menyelesaikannya
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");