OpenStack学习系列-----第二篇 由一个错误看理解整个架构的重要性
来源:互联网 发布:华为m3可以刷windows吗 编辑:程序博客网 时间:2024/06/06 01:22
看了openstack没几天,然后就开始试着用java调用所有的API,第一步得到Credentials的时候成功了,然后第二步,传参数使所有的server信息都列出来的时候报错404.具体描述如下(曾经发到论坛求助):
最近搭建好openstack环境,测试API的时候出错,是404错误,涉及到的代码如下:
- public static Map<String, Object> get(URL url, String token) throws IOException { HttpURLConnection conn = getURLConnection(url);// conn.setRequestProperty("Content-Type", APPLICATION_JSON); conn.setRequestMethod(HTTP_GET); conn.setDoInput(true);// conn.setDoOutput(true); if (token != null) { System.out.println(token); conn.setRequestProperty("X-Auth-Token", token); } System.out.println(conn.toString()); if (conn.getResponseCode() == 401) { throw new IOException("Authorize Error occurs and the response code is :" + conn.getResponseCode() + ",and the message is:" + conn.getResponseMessage()); } System.out.println(conn.getResponseCode()); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); // System.out.println(mapper.readValue(conn.getInputStream(), new TypeReference<Map<String, Object>>() {})); return mapper.readValue(conn.getInputStream(), new TypeReference<Map<String, Object>>() { }); } /** * Creates the HTTP URL connection * * @param url * the URL to be used to establish HTTP connection * @return A HttpURLConnection */ private static HttpURLConnection getURLConnection(URL url) throws IOException { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // disable cache conn.setUseCaches(false); // turn off HTTP keep-alive conn.setRequestProperty("Connection", "close"); return conn; }
上面的参数URL 是:http://127.0.0.1:5000/v2/2835ba0b17384840941b5c5d653fb81a/servers/detail
报错如下:
- Java code
- Exception in thread "main" java.io.FileNotFoundException: http://127.0.0.1:5000/v2/2835ba0b17384840941b5c5d653fb81a/servers/detail at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1664) at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1662) at java.security.AccessController.doPrivileged(Native Method) at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1660) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1243) at com.intel.cpa.openstack.HttpUtil.get(HttpUtil.java:148) at com.intel.cpa.openstack.NovaAPI.listServers(NovaAPI.java:46) at com.intel.cpa.openstack.NovaAPI.main(NovaAPI.java:37)Caused by: java.io.FileNotFoundException: http://127.0.0.1:5000/v2/2835ba0b17384840941b5c5d653fb81a/servers/detail at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1613) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468) at com.intel.cpa.openstack.HttpUtil.get(HttpUtil.java:137) ... 2 more
请问,这个是什么问题?有没有什么好的建议?
最终要的是发现404问题后思路应该什么样子的?
譬如这个,首先应该考虑构建的URL是否正确,然后这里还有一个要求是把一个值作为header传进去,也做了,请大家帮忙分析一下。
感谢您花时间思考!
多谢大家,已经解决了,确实是URL问题,主要原因是第一次请求后,第二次发送请求应该交由nova模块处理,所以应该换掉端口。
主要问题在呢?第一次得到Credentials的时候,是去keystone,返回得到token,tenant等后,发送第二个请求,是应该去nova compute模块,所以,应该从第一次的返回值里面得到url,然后再发送请求。
所以,还是要去了解openstack这个东西的整体架构。
遇到404错误后,只是一遍一遍的看,没什么用,现在想想,要是分解开始去看应该会很快的找到原因了:
1:http还是https
2:主机地址对不对?
3:端口对不对?(有时候调用不同的模块可能就会换新的端口)
4:端口后面的内容
- OpenStack学习系列-----第二篇 由一个错误看理解整个架构的重要性
- 从错误补丁看回归测试的重要性
- 看log的重要性
- OpenStack架构:一个具有竞争力的先天不足?
- 用一个故事来说OpenStack的架构
- 用一个故事来说OpenStack的架构
- 一个学习Openstack的博客
- 从闪迪的一个U盘看整个行业
- 由一个链接错误想到的
- Fuel-OpenStack架构学习
- 第二章 隐喻的重要性
- 由编译错误看-L. -lxxxx的正确位置
- 关于软件架构的重要性
- OpenStack学习笔记之--OpenStack Nova 架构
- 从一个“变态”的题看“分析Java源代码”的重要性!
- 线性相位重要性的理解
- 从甲乙丙的关系看自然语言理解的“第二路径”
- 从一个经典案例看优化mapred.map.tasks的重要性
- (路由)无线参数解读
- TextureBrush画刷 重复显示问题(图像便宜问题)
- 利用Powershell 批量创建文件夹!
- VS2010后台的intelisense能自动补全前台空间名,编译却说识别不了控件名
- Makefile变量定义解析
- OpenStack学习系列-----第二篇 由一个错误看理解整个架构的重要性
- iPhone应用移植到iPad
- 解决调试asp.net程序时无法修改代码的问题
- javascript解析json
- 新浪微博oauth1.0升级oauth2.0问题
- C语言隐式类型转换
- SQLyog 解决中文乱码问题
- Oracle用Start with...Connect By子句递归查询
- hbase之htable线程安全性 HTablePool