我正在为学校项目编写一个包,用户可以在其中指定服务器URL并获取它返回的xml。我在客户方面遇到了错误。
Mock API类
import java.net.*;
import java.util.ArrayList;
import java.io.*;
public class ParkingLotInstance {
/*
* Parking Lot API instance
* Constructor
* URL - String
* Port - int
*/
public static URL serverURL;
public ParkingLotInstance( URL connurl){
serverURL = connurl;
}
public String getParkingLotInfo(){
//Get a response from API server
URL APIurl = this.serverURL;
System.out.println(APIurl);
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(APIurl.openStream()));
String APIresponse;
while ((APIresponse = in.readLine()) != null)
return APIresponse;
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public ArrayList parseParkingLotInfo( String XML ){
//Parse XML into array list
return null;
}
}
主要课程
package parkinglot_api;
import java.net.MalformedURLException;
import java.net.URL;
public class Example {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
URL serverURL;
try {
serverURL = new URL("http://localhost:8080");
ParkingLotInstance API = new ParkingLotInstance(serverURL);
String parkingLotXML = API.getParkingLotInfo();
System.out.println(parkingLotXML);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我得到的错误
http://localhost:8080
null
java.io.IOException: Invalid Http response
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.URL.openStream(Unknown Source)
at parkinglot_api.ParkingLotInstance.getParkingLotInfo(ParkingLotInstance.java:28)
at parkinglot_api.Example.main(Example.java:20)
服务器代码
https://bitbucket.org/it460/parking-lot-api/src/f7095b71eb11/server
我不太了解Java特别是网络的东西,所以上面是在localhost:8080上运行服务器的代码的链接,并吐出xml。不知道在哪里设置标题,说实话,它很高兴它超过了xml。我需要调整这个的原因是因为教授希望我将客户端打包,以便另一个组可以指定应用服务器URL并获取数据。这就是我在这里发布的代码中所尝试的内容。
答案 0 :(得分:3)
在Response类中包含以下内容:
response += "HTTP/1.1 200 OK\n";
response += "Content-Type: application/xml\n\n";
if ( format.equals("xml")){
// Retrieve XML Document
String xml = LotFromDB.getParkingLotXML();
response += xml;
}
注意:您应该避免编写自己的Web服务器。而是使用现有的Web服务器,这将有很大帮助。上述更改将解决您当前的问题,但如果继续这一行,您将遇到更多问题。我建议您考虑使用任何servlet engine服务器实现。此外,在客户端上使用成熟的HTTP客户端库,例如Apache Http Client而不是java.net.URL
类。
答案 1 :(得分:1)
看起来像是标题处理的问题。请使用tcp monitor(例如:http://ws.apache.org/commons/tcpmon表单apache)来查找问题。 例如,它可能是由不正确的字符编码或消息多部分编码(猜测)的特定方式引起的。