(JavaでcUrlを使用するために)HttpURLConnectionを使用してURLに投稿リクエストを送信しようとしています。リクエストのコンテンツは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を使用してcurlを実行し、結果CURLINFO_HTTP_CODE
が200になることを印刷してみました。
これをデバッグするにはどうすればいいですか?サービスとクライアントの両方がローカルサーバー上にあります。
解決済み: SO自体の回答 を参照した後、問題を解決できました。
標準ポート以外のURLに接続すると、HttpURLConnectionが常に404応答を返すようです。
これらの行を追加すると解決しました
con.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
con.setRequestProperty("Accept","*/*");