Я пытаюсь отправить почтовый запрос на URL-адрес с помощью HttpURLConnection (для использования cUrl в java). Содержимым запроса является xml, и в конечной точке приложение обрабатывает xml и сохраняет запись в базе данных, а затем отправляет ответ в виде строки xml. Приложение размещено на apache-tomcat локально.
Когда я выполняю этот код с терминала, в базу данных добавляется строка, как и ожидалось. Но при получении 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-файлом напрямую, это исключение не возникает.
Приложение-служба использует платформу Spring и Jaxb2Marshaller для создания XML-ответа.
Класс ReadWriteTextFile взят отсюда
Спасибо.
Изменить: он сохраняет данные в БД и одновременно отправляет обратно код состояния ответа 404.
Я также попытался сделать завиток с помощью php и распечатать, CURLINFO_HTTP_CODE
который оказался 200.
Любые идеи о том, как мне отладить это? И служба, и клиент находятся на локальном сервере.
Постановили: я мог бы решить проблему, обратившись к ответу о самой SO.
Кажется, что HttpURLConnection всегда возвращает ответ 404 при подключении к URL-адресу с нестандартным портом.
Добавление этих строк решило это
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");