从HttpURLConnection获取InputStream对象时发生FileNotFoundException

我正在尝试使用HttpURLConnection(用于在java中使用cUrl)向url发送post请求。
请求的内容是xml,在结束时,应用程序处理xml并将记录存储到数据库,然后以xml字符串的形式发回响应。该应用程序在本地托管在ApacheTomcat上

当我从终端执行此代码时,一行按预期添加到db中。但是在从连接获取InputStream时引发了如下异常

java.io.FileNotFoundException:http://localhost:8080/myapp/service/generate
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)
位于org.kodeplay.helloworld.HttpCurl.main(HttpCurl.java:30)

这是密码

公共类HttpCurl{
公共静态void main(字符串[]args){
HttpURLConnection;
试一试{
con=(HttpURLConnection)新URL(“http://localhost:8080/myapp/service/generate”).openConnection();
con.setRequestMethod(“POST”);
con.设置输出(真);
con.setDoInput(真);
File xmlFile=新文件(“test.xml”);
字符串xml=ReadWriteTextFile.getContents(xmlFile);
con.getOutputStream().write(xml.getBytes(“UTF-8”);
InputStream响应=con.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(响应));
for(字符串行;(line=reader.readLine())!=null;){
系统输出打印项次(行);
}
reader.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

因为异常被跟踪到行InputStream response=con.getInputStream()并且FileNotFoundException似乎不涉及任何文件

当我尝试直接打开与xml文件的连接时,它不会引发此异常

jaxb2ler使用xml服务和marshaller响应框架创建应用程序

类ReadWriteTextFile取自此处

谢谢

编辑:
它将数据保存在数据库中,同时返回404响应状态代码

我还试着用php做了一个curl,然后打印出CURLINFO\uhttp\ucode,结果是200

我该如何调试它呢?服务和客户端都在本地服务器上

已解决:
我可以在参考答案后解决这个问题

当使用非标准端口连接到url时,HttpURLConnection似乎总是返回404响应

添加这些行解决了这个问题

con.setRequestProperty(“用户代理”、“Mozilla/5.0(兼容)”);
con.setRequestProperty(“接受”,“*/*”);

我不知道您的Spring/JAXB组合,但一般REST Web服务不会在POST/PUT上返回响应体,只返回响应状态。你想确定它而不是身体

替换

InputStream响应=con.getInputStream();

int status=con.getResponseCode();

HTTP规范中提供了所有可用的状态代码及其含义,如前所述。webservice本身还应该附带一些文档,概述webservice支持的所有状态代码及其特殊含义(如果有的话)

如果状态以4nn5nn开头,您希望使用getErrorStream()来读取可能包含错误详细信息的响应正文

InputStream error=con.getErrorStream();

发表评论