3

我为一个学校项目编写了一个包,用户可以在其中指定一个服务器 url 并获取它返回的 xml。尽管在客户端,我遇到了一个错误。

模拟 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 并获取数据。这就是我在此处发布的代码中所尝试的。

4

2 回答 2

4

在您的 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 引擎。此外,在客户端上使用成熟的 HTTP 客户端库,例如Apache Http Client,而不是java.net.URL类。

于 2012-04-30T03:29:59.507 回答
1

看起来像标题处理的问题。请使用 tcp monitor(例如:http ://ws.apache.org/commons/tcpmon form apache)来查找问题。例如,它可能是由不正确的字符编码或消息多部分编码(猜测)的特定方式引起的。

于 2012-04-30T01:23:22.137 回答