2012-10-25 95 views
0

我想通過java從openweathermap.org獲取一些數據,但是當我運行代碼時,我得到一個ConnectionException。爲什麼我的連接被拒絕?

我的代碼是:

public static void openweathermapTest1() { 
    String uri = "http://openweathermap.org/data/2.1/find/station?lat=55&lon=37&cnt=10"; 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    WebResource service = client.resource(uri); 
    String xml = service.accept(MediaType.TEXT_XML).get(String.class); 
    System.out.println("Output as XML: " + xml); 
} 

和例外:

Exception in thread "main" 
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect 
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151) 
at com.sun.jersey.api.client.Client.handle(Client.java:648)  
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680) 
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) 
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:507) 
at GetPoint.openweathermapTest1(GetPoint.java:110) 
at GetPoint.main(GetPoint.java:142) 

奇怪的是,當我在我的web瀏覽器中調用this link,我得到預期的數據。怎麼可能?我在這裏錯過了什麼?我該如何解決它? (我嘗試了所有三個uri,都在Firefox中工作,而不是在我的程序中)

+0

你有沒有檢查是否有防火牆? – ADTC

+2

我編譯你的代碼,它工作正常(呃,實際上它提取JSON而不是XML,但它只是當給定一個'text/xml'或'application/xml'' Accept'頭時該服務是如何工作的)。問題在於別處。你有沒有防火牆運行? – toniedzwiedz

+1

謝謝湯姆。我不明白的是,爲什麼我可以用firefox連接而不用java連接。他們使用不同的端口嗎?我明天會檢查我的系統管理員,因爲我確實可以控制防火牆。 – Burkhard

回答

1

答案很簡單:我的工作計算機在代理之後,只有firefox在使用它。有了一點代理魔法,我終於能夠得到預期的結果。

感謝湯姆和吉姆加里森對他們的有用評論!

編輯:我用下面的代碼使用代理:

private static void useProxy(String host, int port) 
{ 
    System.setProperty("http.proxySet", "true"); 
    System.setProperty("http.proxyHost", host); 
    System.setProperty("http.proxyPort", String.valueOf(port)); 
} 
-1

我面臨同樣的問題。當我重新檢查我的JAVA安裝時,我的問題得到了解決。我有JDK 6和7 ..這種搞砸..所以我完全刪除jdk 7,並指向jdk 6.所以命令行版本,eclipse和服務器都應該指向相同的jdk ..這解決了錯誤。