मैं HttpURLConnection (जावा में cUrl का उपयोग करने के लिए) का उपयोग करके एक url के लिए पोस्ट अनुरोध भेजने की कोशिश कर रहा हूं। अनुरोध की सामग्री xml है और अंतिम बिंदु पर, अनुप्रयोग xml को संसाधित करता है और डेटाबेस के लिए एक रिकॉर्ड संग्रहीत करता है और फिर xml स्ट्रिंग के रूप में प्रतिक्रिया भेजता है। ऐप को स्थानीय स्तर पर एपाचे-टॉमकैट पर होस्ट किया गया है।
जब मैं टर्मिनल से इस कोड को निष्पादित करता हूं, तो एक पंक्ति अपेक्षित रूप से db में जुड़ जाती है। लेकिन कनेक्शन से इनपुटस्ट्रीम प्राप्त करते समय एक अपवाद निम्नानुसार फेंका गया है
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)
यहाँ कोड है
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();
}
}
}
इसका भ्रामक है क्योंकि अपवाद रेखा का पता लगाया गया है InputStream response = con.getInputStream();
और किसी FileNotFoundException के लिए कोई फ़ाइल शामिल नहीं है।
जब मैं सीधे एक xml फ़ाइल से कनेक्शन खोलने का प्रयास करता हूं, तो वह इस अपवाद को नहीं फेंकती।
सर्विस ऐप प्रतिक्रिया xml बनाने के लिए स्प्रिंग फ्रेमवर्क और जैक्सब 2 मार्शलर का उपयोग करता है।
कक्षा ReadWriteTextFile को यहाँ से लिया गया है
धन्यवाद।
संपादित करें: खैर यह DB में डेटा को बचाता है और एक ही समय में 404 प्रतिक्रिया स्थिति कोड वापस भेजता है।
मैंने भी php का उपयोग करके एक कर्ल करने की कोशिश की और प्रिंट आउट किया CURLINFO_HTTP_CODE
जो 200 निकला।
इस बारे में कोई विचार कि मैं इसे डिबगिंग के बारे में कैसे बताता हूं? सेवा और ग्राहक दोनों स्थानीय सर्वर पर हैं।
हल: मैं SO पर ही जवाब देने के बाद समस्या का समाधान कर सकता था।
ऐसा लगता है कि HttpURLConnection हमेशा एक गैर मानक पोर्ट के साथ url से कनेक्ट होने पर 404 प्रतिक्रिया देता है।
इन पंक्तियों को जोड़कर इसे हल किया
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");