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を吐き出すコードへのリンクです。Headers をどこに設定すればよいかわからなかったのですが、正直なところ、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 サーバーを使用してください。上記の変更により、現在の問題は解決されますが、このまま続行すると、さらに多くの問題が発生します。サーバーの実装にサーブレットエンジンを使用することを検討することをお勧めします。また、クライアントでは、クラスの代わりにApache Http Clientなどの成熟した HTTP クライアント ライブラリを使用します。java.net.URL

于 2012-04-30T03:29:59.507 に答える
1

ヘッダー処理に問題があるようです。問題を見つけるには、 tcp モニター (例: http://ws.apache.org/commons/tcpmonフォーム apache) を使用してください。たとえば、不適切な char エンコーディングまたはメッセージ マルチパート エンコーディングの特定の方法 (推測) が原因である可能性があります。

于 2012-04-30T01:23:22.137 に答える