2014-04-28 13 views
5

Ich versuche, einen REST-Service mit Spring-Einrichtungen nach this Guide zu konsumieren, aber ich habe ein Problem mit der Verbindung. Ich möchteSpring RestTemplate Verbindung zurückgesetzt

den REST-Service mit GET-Methode für den Zugriff auf

http://date.jsontest.com/

ich dieses Stück Code geschrieben haben, den Dienst

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

    } 

} 

Die Anwendung führt den folgenden Ausnahmestapel

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 
zu konsumieren

Ich habe den REST-Aufruf mit zwei verschiedenen Netzwerkverbindungen versucht, so dass es kein Netzwerkverbindungsproblem ist; Außerdem, wenn ich den Dienst von einem Browser aus besuche, kann ich die Antwort richtig erhalten.

Was kann das Problem sein?

Vielen Dank im Voraus

+0

Haben Sie die Jackson-Bibliotheken hinzugefügt, scheint es ein Problem, wenn Sie versuchen, die Daten zu extrahieren, wie die URL funktioniert – Koitoer

+0

Hallo @ Koitoer, danke für Ihre Antwort. Ich habe die Abhängigkeiten von jackson-core, jackson-annotations und jackson-databind (ver 2.2.3) zu meiner pom.xml hinzugefügt. – gvdm

+0

Und das Problem lösen? oder persist – Koitoer

Antwort

4

Gelöst. Das Problem ist an die Netzwerkverbindung gebunden. Das Netzwerk, dem ich angehöre, ist Firewall und Proxy. Jetzt versuche ich zu verstehen, wie man Dinge mit dem Firewall-Netzwerk machen kann (es ist meine Firma).

+0

Ich bekomme einen ähnlichen Fehler. "ClientAbortException" auf dem Server, aber eine "SocketException" auf dem Client. Können Sie mir sagen, was Sie in der Firewall ändern mussten, um diesen Fehler zu beheben? – Pytry

+0

Hallo @Pytry. Ich bin nicht in der gleichen Firma und arbeite jetzt mit anderen Technologien, daher kann ich im Moment das Problem nicht reproduzieren und Ihnen sagen, was die Lösung ist:/aber im Allgemeinen, wenn Ihr Netzwerk Proxy ist, müssen Sie das Unternehmen konfigurieren Proxy in Ihrem REST-Client, damit er die Anforderungen über den Proxy-Server ausführen kann – gvdm

Verwandte Themen