Browse Source

Fix error message in RestTemplate

Issue: SPR-13860
pull/947/merge
Rossen Stoyanchev 10 years ago
parent
commit
f3c2bb6557
  1. 5
      spring-web/src/main/java/org/springframework/web/client/RestTemplate.java
  2. 31
      spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java

5
spring-web/src/main/java/org/springframework/web/client/RestTemplate.java

@ -603,8 +603,11 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
} }
} }
catch (IOException ex) { catch (IOException ex) {
String resource = url.toString();
String query = url.getRawQuery();
resource = (query != null ? resource.substring(0, resource.indexOf(query) - 1) : resource);
throw new ResourceAccessException("I/O error on " + method.name() + throw new ResourceAccessException("I/O error on " + method.name() +
" request for \"" + url + "\": " + ex.getMessage(), ex); " request for \"" + resource + "\": " + ex.getMessage(), ex);
} }
finally { finally {
if (response != null) { if (response != null) {

31
spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2014 the original author or authors. * Copyright 2002-2015 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -49,6 +49,7 @@ import static org.mockito.BDDMockito.*;
/** /**
* @author Arjen Poutsma * @author Arjen Poutsma
* @author Rossen Stoyanchev
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class RestTemplateTests { public class RestTemplateTests {
@ -135,7 +136,7 @@ public class RestTemplateTests {
given(response.getStatusCode()).willReturn(status); given(response.getStatusCode()).willReturn(status);
given(response.getStatusText()).willReturn(status.getReasonPhrase()); given(response.getStatusText()).willReturn(status.getReasonPhrase());
Map<String, String> vars = new HashMap<String, String>(2); Map<String, String> vars = new HashMap<>(2);
vars.put("first", null); vars.put("first", null);
vars.put("last", "foo"); vars.put("last", "foo");
template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, vars); template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, vars);
@ -278,7 +279,7 @@ public class RestTemplateTests {
given(response.getHeaders()).willReturn(new HttpHeaders()); given(response.getHeaders()).willReturn(new HttpHeaders());
given(response.getBody()).willReturn(null); given(response.getBody()).willReturn(null);
Map<String, String> uriVariables = new HashMap<String, String>(2); Map<String, String> uriVariables = new HashMap<>(2);
uriVariables.put("hotel", "1"); uriVariables.put("hotel", "1");
uriVariables.put("publicpath", "pics/logo.png"); uriVariables.put("publicpath", "pics/logo.png");
uriVariables.put("scale", "150x150"); uriVariables.put("scale", "150x150");
@ -351,7 +352,7 @@ public class RestTemplateTests {
HttpHeaders entityHeaders = new HttpHeaders(); HttpHeaders entityHeaders = new HttpHeaders();
entityHeaders.setContentType(contentType); entityHeaders.setContentType(contentType);
HttpEntity<String> entity = new HttpEntity<String>(helloWorld, entityHeaders); HttpEntity<String> entity = new HttpEntity<>(helloWorld, entityHeaders);
URI result = template.postForLocation("http://example.com", entity); URI result = template.postForLocation("http://example.com", entity);
assertEquals("Invalid POST result", expected, result); assertEquals("Invalid POST result", expected, result);
@ -379,7 +380,7 @@ public class RestTemplateTests {
HttpHeaders entityHeaders = new HttpHeaders(); HttpHeaders entityHeaders = new HttpHeaders();
entityHeaders.set("MyHeader", "MyValue"); entityHeaders.set("MyHeader", "MyValue");
HttpEntity<String> entity = new HttpEntity<String>(helloWorld, entityHeaders); HttpEntity<String> entity = new HttpEntity<>(helloWorld, entityHeaders);
URI result = template.postForLocation("http://example.com", entity); URI result = template.postForLocation("http://example.com", entity);
assertEquals("Invalid POST result", expected, result); assertEquals("Invalid POST result", expected, result);
@ -622,21 +623,27 @@ public class RestTemplateTests {
verify(response).close(); verify(response).close();
} }
// Issue: SPR-9325, SPR-13860
@Test @Test
public void ioException() throws Exception { public void ioException() throws Exception {
String url = "http://example.com/resource?access_token=123";
given(converter.canRead(String.class, null)).willReturn(true); given(converter.canRead(String.class, null)).willReturn(true);
MediaType mediaType = new MediaType("foo", "bar"); MediaType mediaType = new MediaType("foo", "bar");
given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(mediaType)); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(mediaType));
given(requestFactory.createRequest(new URI("http://example.com/resource"), HttpMethod.GET)).willReturn(request); given(requestFactory.createRequest(new URI(url), HttpMethod.GET)).willReturn(request);
given(request.getHeaders()).willReturn(new HttpHeaders()); given(request.getHeaders()).willReturn(new HttpHeaders());
given(request.execute()).willThrow(new IOException()); given(request.execute()).willThrow(new IOException("Socket failure"));
try { try {
template.getForObject("http://example.com/resource", String.class); template.getForObject(url, String.class);
fail("RestClientException expected"); fail("RestClientException expected");
} }
catch (ResourceAccessException ex) { catch (ResourceAccessException ex) {
// expected assertEquals("I/O error on GET request for \"http://example.com/resource\": " +
"Socket failure; nested exception is java.io.IOException: Socket failure",
ex.getMessage());
} }
} }
@ -669,7 +676,7 @@ public class RestTemplateTests {
HttpHeaders entityHeaders = new HttpHeaders(); HttpHeaders entityHeaders = new HttpHeaders();
entityHeaders.set("MyHeader", "MyValue"); entityHeaders.set("MyHeader", "MyValue");
HttpEntity<String> requestEntity = new HttpEntity<String>(body, entityHeaders); HttpEntity<String> requestEntity = new HttpEntity<>(body, entityHeaders);
ResponseEntity<Integer> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, Integer.class); ResponseEntity<Integer> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, Integer.class);
assertEquals("Invalid POST result", expected, result.getBody()); assertEquals("Invalid POST result", expected, result.getBody());
assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType()); assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType());
@ -703,7 +710,7 @@ public class RestTemplateTests {
responseHeaders.setContentLength(10); responseHeaders.setContentLength(10);
given(response.getStatusCode()).willReturn(HttpStatus.OK); given(response.getStatusCode()).willReturn(HttpStatus.OK);
given(response.getHeaders()).willReturn(responseHeaders); given(response.getHeaders()).willReturn(responseHeaders);
given(response.getBody()).willReturn(new ByteArrayInputStream(new Integer(42).toString().getBytes())); given(response.getBody()).willReturn(new ByteArrayInputStream(Integer.toString(42).getBytes()));
given(converter.canRead(intList.getType(), null, MediaType.TEXT_PLAIN)).willReturn(true); given(converter.canRead(intList.getType(), null, MediaType.TEXT_PLAIN)).willReturn(true);
given(converter.read(eq(intList.getType()), eq(null), any(HttpInputMessage.class))).willReturn(expected); given(converter.read(eq(intList.getType()), eq(null), any(HttpInputMessage.class))).willReturn(expected);
given(response.getStatusCode()).willReturn(HttpStatus.OK); given(response.getStatusCode()).willReturn(HttpStatus.OK);
@ -713,7 +720,7 @@ public class RestTemplateTests {
HttpHeaders entityHeaders = new HttpHeaders(); HttpHeaders entityHeaders = new HttpHeaders();
entityHeaders.set("MyHeader", "MyValue"); entityHeaders.set("MyHeader", "MyValue");
HttpEntity<String> requestEntity = new HttpEntity<String>(requestBody, entityHeaders); HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, entityHeaders);
ResponseEntity<List<Integer>> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, intList); ResponseEntity<List<Integer>> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, intList);
assertEquals("Invalid POST result", expected, result.getBody()); assertEquals("Invalid POST result", expected, result.getBody());
assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType()); assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType());

Loading…
Cancel
Save