Я намагаюся надіслати запит на пошту до URL за допомогою HttpURLConnection (для використання cUrl в Java). Вміст запиту становить xml, і в кінцевій точці додаток обробляє xml і зберігає запис у базу даних, а потім надсилає відповідь у вигляді рядка xml. Додаток розміщено на апаш-томкаті локально.
Коли я виконую цей код з терміналу, до db додається рядок, як очікувалося. Але виняток видається наступним чином під час отримання InputStream від з'єднання
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 безпосередньо, це виняток не кидає.
Додаток служби використовує весняний фреймворк та Jaxb2Marshaller для створення відповіді xml.
Клас ReadWriteTextFile взято звідси
Дякую.
Редагувати: Добре це зберігає дані в БД і одночасно надсилає код статусу відповіді 404.
Я також спробував зробити завиток за допомогою php і роздрукувати, CURLINFO_HTTP_CODE
який виявляється 200.
Будь-які ідеї щодо того, як мені зайнятися налагодженням цього? І сервіс, і клієнт перебувають на локальному сервері.
Вирішено: Я міг би вирішити проблему, звернувшись до відповіді на САМ.
Здається, HttpURLConnection завжди повертає відповідь 404 під час підключення до URL з нестандартним портом.
Додавання цих рядків вирішило це
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");