Spring RestTemplate connection reset

匿名 (未验证) 提交于 2019-12-03 00:48:01

问题:

I'm trying to consume a REST service with Spring facilities following this guide but I'm having a problem with the connection. I want to access with GET method the REST service

http://date.jsontest.com/

I've written this piece of code to consume the service

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);      }  } 

The application throws the following exception stack

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 

I tried the REST call with two different network connections so that's not a network connection problem; moreover if I visit the service from a browser I can get the response correctly.

What can be the problem?

Thank you in advance

回答1:

Solved. The problem is bound to the network connection. The network I belong is firewalled and proxied. now I'm trying to understand how to make things done with the firewalled network (it's my company one).



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!