如何解析文本Web服务

时间:2012-07-10 19:02:24

标签: java web-services

我正在尝试从java程序中的Web服务获取结果。我以前做过xml服务,但这个是基于文本的,我无法弄清楚如何记录响应。

以下是webService:http://ws.geonames.org/countryCode?lat=47.03&lng=10.2

谢谢!

3 个答案:

答案 0 :(得分:1)

如果它只是文本,并且您不使用任何标准格式(如SOAP),则需要使用套接字:

URL myURL = new URL("http://ws.geonames.org/countryCode?lat=47.03&lng=10.2");
URLConnection serviceConnection = myURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
                               serviceConnection.getInputStream()));

List<String> response =new ArrayList<String>();

如果你有很多行,请使用它:

while ((inputLine = in.readLine()) != null) 
   response.add(inputLine);

如果您只有一行(如问题中的Web服务),请使用此选项:

String countryCode = in.readLine();

结束时:

serviceConnection.close();

就我而言,countryCode是“AT”

答案 1 :(得分:0)

public class CountryCodeReader {

    private String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

    public String readFromUrl(String url) throws IOException, JSONException {
        InputStream is = new URL(url).openStream();
        try {
            InputStreamReader is = new InputStreamReader(is, Charset.forName("UTF-8"))
            BufferedReader rd = new BufferedReader(is);

            return readAll(rd);
        } finally {
            is.close();
        }
        return null;
    }

    public static void main(String[] argv) {
        CountryCodeReader ccr = new CountryCodeReader(); 
        String cc = ccr.readFromUrl("http://ws.geonames.org/countryCode?lat=47.03&lng=10.2");
    }

}

答案 2 :(得分:0)

除URL之外的另一种实现是使用HttpClient。