2014-04-28 83 views
5

我試圖在this指南中使用Spring設施的REST服務,但是我遇到了連接問題。 我想用GET方法來訪問REST服務彈簧恢復模板連接重置

http://date.jsontest.com/

我寫這段代碼消費服務

package pack; 
import static org.junit.Assert.assertTrue; 

import java.util.HashMap; 
import java.util.Map; 

import javax.annotation.Generated; 

import org.junit.Test; 
import org.springframework.web.client.RestTemplate; 

import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 


public class RestUtilityTest { 

    @JsonInclude(JsonInclude.Include.NON_NULL) 
    @JsonPropertyOrder({ 
     "time", 
     "milliseconds_since_epoch", 
     "date" 
    }) 
    public class DateTime { 

     @JsonProperty("time") 
     private String time; 
     @JsonProperty("milliseconds_since_epoch") 
     private Integer milliseconds_since_epoch; 
     @JsonProperty("date") 
     private String date; 
     private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

     @JsonProperty("time") 
     public String getTime() { 
      return time; 
     } 

     @JsonProperty("time") 
     public void setTime(String time) { 
      this.time = time; 
     } 

     @JsonProperty("milliseconds_since_epoch") 
     public Integer getMilliseconds_since_epoch() { 
      return milliseconds_since_epoch; 
     } 

     @JsonProperty("milliseconds_since_epoch") 
     public void setMilliseconds_since_epoch(Integer milliseconds_since_epoch) { 
      this.milliseconds_since_epoch = milliseconds_since_epoch; 
     } 

     @JsonProperty("date") 
     public String getDate() { 
      return date; 
     } 

     @JsonProperty("date") 
     public void setDate(String date) { 
      this.date = date; 
     } 

     @JsonAnyGetter 
     public Map<String, Object> getAdditionalProperties() { 
      return this.additionalProperties; 
     } 

     @JsonAnySetter 
     public void setAdditionalProperty(String name, Object value) { 
      this.additionalProperties.put(name, value); 
     } 

    } 

    @Test 
    public void getTest() 
    { 

     RestTemplate restTemplate = new RestTemplate(); 
     DateTime datetime = restTemplate.getForObject("http://date.jsontest.com", DateTime.class); 

     assertTrue(datetime != null); 

    } 

} 

應用程序引發以下異常堆棧

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://date.jsontest.com": Connection reset; nested exception is java.net.SocketException: Connection reset 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:524) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:472) 
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237) 
    at pack.RestUtilityTest.getTest(RestUtilityTest.java:95) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.io.BufferedInputStream.fill(Unknown Source) 
    at java.io.BufferedInputStream.read1(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) 
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) 
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at java.net.HttpURLConnection.getResponseCode(Unknown Source) 
    at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:47) 
    at org.springframework.http.client.AbstractClientHttpResponse.getStatusCode(AbstractClientHttpResponse.java:32) 
    at org.springframework.web.client.DefaultResponseErrorHandler.getHttpStatusCode(DefaultResponseErrorHandler.java:55) 
    at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:49) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:510) 
    ... 26 more 

我試過REST調用兩個不同的網絡連接,所以這不是一個網絡連接問題;此外,如果我從瀏覽器訪問服務,我可以正確地得到響應。

可能是什麼問題?

謝謝您提前

+0

你有沒有添加傑克遜庫,它似乎是一個問題,當試圖提取數據,因爲該網址工作正常 – Koitoer

+0

嗨@Koitoer,謝謝你的回覆。我已將jackson-core,jackson-annotations和jackson-databind(版本2.2.3)依賴項添加到我的pom.xml中。 – gvdm

+0

那解決問題了嗎?或堅持 – Koitoer

回答

4

解決。問題被綁定到網絡連接。我所屬的網絡是防火牆和代理。 現在我試圖瞭解如何使用防火牆網絡完成任務(這是我的公司之一)。

+0

我收到類似的錯誤。服務器上的「ClientAbortException」,而是客戶端上的「SocketException」。你能告訴我你必須在防火牆中更改以消除此錯誤嗎? – Pytry

+0

Hi @Pytry。我不在同一家公司工作,現在可以使用其他技術,因此目前我無法重現問題並告訴您什麼是解決方案:/但一般情況下,如果您的網絡被代理,則必須配置公司代理在您的REST客戶端中,以便讓它通過代理服務器執行請求 – gvdm