HttpURLConnection kullanarak (java'da cUrl kullanmak için) bir url'ye gönderi isteği göndermeye çalışıyorum. İsteğin içeriği xml'dir ve son noktada, uygulama xml'yi işler ve veritabanına bir kayıt saklar ve ardından xml dizesi biçiminde bir yanıt gönderir. Uygulama yerel olarak apache-tomcat üzerinde barındırılmaktadır.
Bu kodu terminalden çalıştırdığımda, beklendiği gibi db'ye bir satır ekleniyor. Ancak, InputStream'i bağlantıdan alırken aşağıdaki gibi bir istisna atılır
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)
İşte kod
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();
}
}
}
Kafa karıştırıcı çünkü istisna satıra kadar izleniyor InputStream response = con.getInputStream();
ve FileNotFoundException için herhangi bir dosya yok gibi görünüyor.
Doğrudan bir xml dosyasına bağlantı açmaya çalıştığımda, bu istisnayı atmıyor.
Servis uygulaması, yanıt xml'sini oluşturmak için yay çerçevesini ve Jaxb2Marshaller'ı kullanır.
ReadWriteTextFile sınıfı buradan alınır.
Teşekkürler.
Düzenleme: Verileri DB'ye kaydeder ve aynı zamanda 404 yanıt durum kodunu geri gönderir.
Ayrıca php kullanarak bir curl yapmayı denedim ve CURLINFO_HTTP_CODE
hangisinin 200 olduğu ortaya çıktı.
Bu hatayı nasıl ayıklayacağım hakkında bir fikriniz var mı? Hem hizmet hem de istemci yerel sunucudadır.
Çözüldü: SO ile ilgili bir cevaba atıfta bulunduktan sonra sorunu çözebilirim .
HttpURLConnection, standart olmayan bir bağlantı noktasına sahip bir url'ye bağlanırken her zaman 404 yanıtı döndürüyor gibi görünüyor.
Bu satırları eklemek sorunu çözdü
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");