From c1bc74c83fb1b1b9f7a0863c2c0ede775182f37f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 19 Jan 2018 19:13:16 +0100 Subject: [PATCH] ResponseEntityResponseExtractor tolerates unknown HTTP status codes Issue: SPR-16371 --- .../MessageBodyClientHttpResponseWrapper.java | 8 +- .../web/client/RestTemplate.java | 5 +- .../web/client/RestTemplateTests.java | 138 ++++++++---------- 3 files changed, 68 insertions(+), 83 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/client/MessageBodyClientHttpResponseWrapper.java b/spring-web/src/main/java/org/springframework/web/client/MessageBodyClientHttpResponseWrapper.java index 8d3afc897e..35a7445ead 100644 --- a/spring-web/src/main/java/org/springframework/web/client/MessageBodyClientHttpResponseWrapper.java +++ b/spring-web/src/main/java/org/springframework/web/client/MessageBodyClientHttpResponseWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -57,9 +57,9 @@ class MessageBodyClientHttpResponseWrapper implements ClientHttpResponse { */ public boolean hasMessageBody() throws IOException { try { - HttpStatus responseStatus = getStatusCode(); - if (responseStatus.is1xxInformational() || responseStatus == HttpStatus.NO_CONTENT || - responseStatus == HttpStatus.NOT_MODIFIED) { + HttpStatus status = getStatusCode(); + if (status != null && status.is1xxInformational() || status == HttpStatus.NO_CONTENT || + status == HttpStatus.NOT_MODIFIED) { return false; } } diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index 41f1c6c9a6..d439b7cc20 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -20,7 +20,6 @@ import java.io.IOException; import java.lang.reflect.Type; import java.net.URI; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -931,10 +930,10 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat public ResponseEntity extractData(ClientHttpResponse response) throws IOException { if (this.delegate != null) { T body = this.delegate.extractData(response); - return new ResponseEntity(body, response.getHeaders(), response.getStatusCode()); + return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).body(body); } else { - return new ResponseEntity(response.getHeaders(), response.getStatusCode()); + return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).build(); } } } diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java index 1ceb8ff760..6f4798af57 100644 --- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java +++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,7 +49,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsIterableContainingInOrder.contains; import static org.junit.Assert.*; import static org.mockito.BDDMockito.*; -import static org.springframework.http.HttpMethod.POST; +import static org.springframework.http.HttpMethod.*; import static org.springframework.http.MediaType.*; /** @@ -80,7 +80,7 @@ public class RestTemplateTests { response = mock(ClientHttpResponse.class); errorHandler = mock(ResponseErrorHandler.class); converter = mock(HttpMessageConverter.class); - template = new RestTemplate(Collections.>singletonList(converter)); + template = new RestTemplate(Collections.singletonList(converter)); template.setRequestFactory(requestFactory); template.setErrorHandler(errorHandler); } @@ -88,7 +88,7 @@ public class RestTemplateTests { @Test public void varArgsTemplateVariables() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/21"), HttpMethod.GET)) + given(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/21"), GET)) .willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); @@ -96,7 +96,7 @@ public class RestTemplateTests { given(response.getStatusCode()).willReturn(status); given(response.getStatusText()).willReturn(status.getReasonPhrase()); - template.execute("http://example.com/hotels/{hotel}/bookings/{booking}", HttpMethod.GET, null, null, "42", + template.execute("http://example.com/hotels/{hotel}/bookings/{booking}", GET, null, null, "42", "21"); verify(response).close(); @@ -104,7 +104,7 @@ public class RestTemplateTests { @Test public void varArgsNullTemplateVariable() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com/-foo"), HttpMethod.GET)) + given(requestFactory.createRequest(new URI("http://example.com/-foo"), GET)) .willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); @@ -112,14 +112,14 @@ public class RestTemplateTests { given(response.getStatusCode()).willReturn(status); given(response.getStatusText()).willReturn(status.getReasonPhrase()); - template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, null, "foo"); + template.execute("http://example.com/{first}-{last}", GET, null, null, null, "foo"); verify(response).close(); } @Test public void mapTemplateVariables() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/42"), HttpMethod.GET)) + given(requestFactory.createRequest(new URI("http://example.com/hotels/42/bookings/42"), GET)) .willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); @@ -128,14 +128,14 @@ public class RestTemplateTests { given(response.getStatusText()).willReturn(status.getReasonPhrase()); Map vars = Collections.singletonMap("hotel", "42"); - template.execute("http://example.com/hotels/{hotel}/bookings/{hotel}", HttpMethod.GET, null, null, vars); + template.execute("http://example.com/hotels/{hotel}/bookings/{hotel}", GET, null, null, vars); verify(response).close(); } @Test public void mapNullTemplateVariable() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com/-foo"), HttpMethod.GET)) + given(requestFactory.createRequest(new URI("http://example.com/-foo"), GET)) .willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); @@ -146,7 +146,7 @@ public class RestTemplateTests { Map vars = new HashMap<>(2); vars.put("first", null); vars.put("last", "foo"); - template.execute("http://example.com/{first}-{last}", HttpMethod.GET, null, null, vars); + template.execute("http://example.com/{first}-{last}", GET, null, null, vars); verify(response).close(); } @@ -154,21 +154,22 @@ public class RestTemplateTests { @Test // SPR-15201 public void uriTemplateWithTrailingSlash() throws Exception { String url = "http://example.com/spring/"; - given(requestFactory.createRequest(new URI(url), HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(new URI(url), GET)).willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); HttpStatus status = HttpStatus.OK; given(response.getStatusCode()).willReturn(status); given(response.getStatusText()).willReturn(status.getReasonPhrase()); - template.execute(url, HttpMethod.GET, null, null); + template.execute(url, GET, null, null); verify(response).close(); } @Test public void errorHandling() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).willReturn(request); + URI uri = new URI("http://example.com"); + given(requestFactory.createRequest(uri, GET)).willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(true); given(response.getStatusCode()).willReturn(HttpStatus.INTERNAL_SERVER_ERROR); @@ -176,7 +177,7 @@ public class RestTemplateTests { willThrow(new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR)).given(errorHandler).handleError(response); try { - template.execute("http://example.com", HttpMethod.GET, null, null); + template.execute("http://example.com", GET, null, null); fail("HttpServerErrorException expected"); } catch (HttpServerErrorException ex) { @@ -191,7 +192,7 @@ public class RestTemplateTests { given(converter.canRead(String.class, null)).willReturn(true); MediaType textPlain = new MediaType("text", "plain"); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), GET)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -221,7 +222,7 @@ public class RestTemplateTests { given(converter.canRead(String.class, null)).willReturn(true); MediaType supportedMediaType = new MediaType("foo", "bar"); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(supportedMediaType)); - given(requestFactory.createRequest(new URI("http://example.com/resource"), HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com/resource"), GET)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -255,7 +256,7 @@ public class RestTemplateTests { given(converter.canRead(String.class, null)).willReturn(true); MediaType textPlain = new MediaType("text", "plain"); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), GET)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -264,15 +265,12 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(textPlain); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); + given(response.getRawStatusCode()).willReturn(HttpStatus.OK.value()); + given(response.getStatusText()).willReturn(HttpStatus.OK.getReasonPhrase()); given(response.getHeaders()).willReturn(responseHeaders); given(response.getBody()).willReturn(new ByteArrayInputStream(expected.getBytes())); given(converter.canRead(String.class, textPlain)).willReturn(true); given(converter.read(eq(String.class), any(HttpInputMessage.class))).willReturn(expected); - given(response.getStatusCode()).willReturn(HttpStatus.OK); - HttpStatus status = HttpStatus.OK; - given(response.getStatusCode()).willReturn(status); - given(response.getStatusText()).willReturn(status.getReasonPhrase()); ResponseEntity result = template.getForEntity("http://example.com", String.class); assertEquals("Invalid GET result", expected, result.getBody()); @@ -290,7 +288,7 @@ public class RestTemplateTests { template.setUriTemplateHandler(uriTemplateHandler); URI expectedUri = new URI("http://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150"); - given(requestFactory.createRequest(expectedUri, HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(expectedUri, GET)).willReturn(request); given(request.getHeaders()).willReturn(new HttpHeaders()); given(request.execute()).willReturn(response); @@ -313,7 +311,7 @@ public class RestTemplateTests { @Test public void headForHeaders() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.HEAD)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), HEAD)).willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); HttpHeaders responseHeaders = new HttpHeaders(); @@ -331,7 +329,7 @@ public class RestTemplateTests { @Test public void postForLocation() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); String helloWorld = "Hello World"; given(converter.canWrite(String.class, null)).willReturn(true); converter.write(helloWorld, null, request); @@ -353,7 +351,7 @@ public class RestTemplateTests { @Test public void postForLocationEntityContentType() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); String helloWorld = "Hello World"; MediaType contentType = MediaType.TEXT_PLAIN; given(converter.canWrite(String.class, contentType)).willReturn(true); @@ -382,7 +380,7 @@ public class RestTemplateTests { @Test public void postForLocationEntityCustomHeader() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); String helloWorld = "Hello World"; given(converter.canWrite(String.class, null)).willReturn(true); HttpHeaders requestHeaders = new HttpHeaders(); @@ -411,7 +409,7 @@ public class RestTemplateTests { @Test public void postForLocationNoLocation() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); String helloWorld = "Hello World"; given(converter.canWrite(String.class, null)).willReturn(true); converter.write(helloWorld, null, request); @@ -431,7 +429,7 @@ public class RestTemplateTests { @Test public void postForLocationNull() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -453,7 +451,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(this.request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(this.request); HttpHeaders requestHeaders = new HttpHeaders(); given(this.request.getHeaders()).willReturn(requestHeaders); String request = "Hello World"; @@ -486,7 +484,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(this.request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(this.request); HttpHeaders requestHeaders = new HttpHeaders(); given(this.request.getHeaders()).willReturn(requestHeaders); String request = "Hello World"; @@ -498,15 +496,12 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(textPlain); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); + given(response.getRawStatusCode()).willReturn(HttpStatus.OK.value()); + given(response.getStatusText()).willReturn(HttpStatus.OK.getReasonPhrase()); given(response.getHeaders()).willReturn(responseHeaders); given(response.getBody()).willReturn(new ByteArrayInputStream(expected.toString().getBytes())); given(converter.canRead(Integer.class, textPlain)).willReturn(true); given(converter.read(eq(Integer.class), any(HttpInputMessage.class))).willReturn(expected); - given(response.getStatusCode()).willReturn(HttpStatus.OK); - HttpStatus status = HttpStatus.OK; - given(response.getStatusCode()).willReturn(status); - given(response.getStatusText()).willReturn(status.getReasonPhrase()); ResponseEntity result = template.postForEntity("http://example.com", request, Integer.class); assertEquals("Invalid POST result", expected, result.getBody()); @@ -522,7 +517,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -530,8 +525,8 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(textPlain); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); given(response.getHeaders()).willReturn(responseHeaders); + given(response.getStatusCode()).willReturn(HttpStatus.OK); given(converter.canRead(Integer.class, textPlain)).willReturn(true); given(converter.read(Integer.class, response)).willReturn(null); HttpStatus status = HttpStatus.OK; @@ -550,7 +545,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -558,14 +553,11 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(textPlain); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); given(response.getHeaders()).willReturn(responseHeaders); + given(response.getRawStatusCode()).willReturn(HttpStatus.OK.value()); + given(response.getStatusText()).willReturn(HttpStatus.OK.getReasonPhrase()); given(converter.canRead(Integer.class, textPlain)).willReturn(true); given(converter.read(Integer.class, response)).willReturn(null); - given(response.getStatusCode()).willReturn(HttpStatus.OK); - HttpStatus status = HttpStatus.OK; - given(response.getStatusCode()).willReturn(status); - given(response.getStatusText()).willReturn(status.getReasonPhrase()); ResponseEntity result = template.postForEntity("http://example.com", null, Integer.class); assertFalse("Invalid POST result", result.hasBody()); @@ -579,7 +571,7 @@ public class RestTemplateTests { @Test public void put() throws Exception { given(converter.canWrite(String.class, null)).willReturn(true); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PUT)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), PUT)).willReturn(request); String helloWorld = "Hello World"; converter.write(helloWorld, null, request); given(request.execute()).willReturn(response); @@ -595,7 +587,7 @@ public class RestTemplateTests { @Test public void putNull() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PUT)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), PUT)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -615,7 +607,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PATCH)).willReturn(this.request); + given(requestFactory.createRequest(new URI("http://example.com"), PATCH)).willReturn(this.request); HttpHeaders requestHeaders = new HttpHeaders(); given(this.request.getHeaders()).willReturn(requestHeaders); String request = "Hello World"; @@ -648,7 +640,7 @@ public class RestTemplateTests { MediaType textPlain = new MediaType("text", "plain"); given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(textPlain)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.PATCH)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), PATCH)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -656,8 +648,8 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(textPlain); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); given(response.getHeaders()).willReturn(responseHeaders); + given(response.getStatusCode()).willReturn(HttpStatus.OK); given(converter.canRead(Integer.class, textPlain)).willReturn(true); given(converter.read(Integer.class, response)).willReturn(null); HttpStatus status = HttpStatus.OK; @@ -675,7 +667,7 @@ public class RestTemplateTests { @Test public void delete() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.DELETE)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), DELETE)).willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); HttpStatus status = HttpStatus.OK; @@ -689,11 +681,11 @@ public class RestTemplateTests { @Test public void optionsForAllow() throws Exception { - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.OPTIONS)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), OPTIONS)).willReturn(request); given(request.execute()).willReturn(response); given(errorHandler.hasError(response)).willReturn(false); HttpHeaders responseHeaders = new HttpHeaders(); - EnumSet expected = EnumSet.of(HttpMethod.GET, HttpMethod.POST); + EnumSet expected = EnumSet.of(GET, POST); responseHeaders.setAllow(expected); given(response.getHeaders()).willReturn(responseHeaders); HttpStatus status = HttpStatus.OK; @@ -713,7 +705,7 @@ public class RestTemplateTests { given(converter.canRead(String.class, null)).willReturn(true); MediaType mediaType = new MediaType("foo", "bar"); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(mediaType)); - given(requestFactory.createRequest(new URI(url), HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(new URI(url), GET)).willReturn(request); given(request.getHeaders()).willReturn(new HttpHeaders()); given(request.execute()).willThrow(new IOException("Socket failure")); @@ -723,7 +715,7 @@ public class RestTemplateTests { } catch (ResourceAccessException ex) { assertEquals("I/O error on GET request for \"http://example.com/resource\": " + - "Socket failure; nested exception is java.io.IOException: Socket failure", + "Socket failure; nested exception is java.io.IOException: Socket failure", ex.getMessage()); } } @@ -736,7 +728,7 @@ public class RestTemplateTests { given(converter.canRead(String.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(parseMediaType("foo/bar"))); - given(requestFactory.createRequest(uri, HttpMethod.GET)).willReturn(request); + given(requestFactory.createRequest(uri, GET)).willReturn(request); given(request.getHeaders()).willReturn(new HttpHeaders()); given(request.execute()).willThrow(new IOException("Socket failure")); @@ -746,7 +738,7 @@ public class RestTemplateTests { } catch (ResourceAccessException ex) { assertEquals("I/O error on GET request for \"http://example.com/resource\": " + - "Socket failure; nested exception is java.io.IOException: Socket failure", + "Socket failure; nested exception is java.io.IOException: Socket failure", ex.getMessage()); } } @@ -755,7 +747,7 @@ public class RestTemplateTests { public void exchange() throws Exception { given(converter.canRead(Integer.class, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(this.request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(this.request); HttpHeaders requestHeaders = new HttpHeaders(); given(this.request.getHeaders()).willReturn(requestHeaders); given(converter.canWrite(String.class, null)).willReturn(true); @@ -767,21 +759,18 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(MediaType.TEXT_PLAIN); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); + given(response.getRawStatusCode()).willReturn(HttpStatus.OK.value()); + given(response.getStatusText()).willReturn(HttpStatus.OK.getReasonPhrase()); given(response.getHeaders()).willReturn(responseHeaders); given(response.getBody()).willReturn(new ByteArrayInputStream(expected.toString().getBytes())); given(converter.canRead(Integer.class, MediaType.TEXT_PLAIN)).willReturn(true); given(converter.read(Integer.class, response)).willReturn(expected); given(converter.read(eq(Integer.class), any(HttpInputMessage.class))).willReturn(expected); - given(response.getStatusCode()).willReturn(HttpStatus.OK); - HttpStatus status = HttpStatus.OK; - given(response.getStatusCode()).willReturn(status); - given(response.getStatusText()).willReturn(status.getReasonPhrase()); HttpHeaders entityHeaders = new HttpHeaders(); entityHeaders.set("MyHeader", "MyValue"); - HttpEntity requestEntity = new HttpEntity<>(body, entityHeaders); - ResponseEntity result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, Integer.class); + HttpEntity entity = new HttpEntity<>(body, entityHeaders); + ResponseEntity result = template.exchange("http://example.com", POST, entity, Integer.class); assertEquals("Invalid POST result", expected, result.getBody()); assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType()); assertEquals("Invalid Accept header", MediaType.TEXT_PLAIN_VALUE, requestHeaders.getFirst("Accept")); @@ -800,7 +789,7 @@ public class RestTemplateTests { ParameterizedTypeReference> intList = new ParameterizedTypeReference>() {}; given(converter.canRead(intList.getType(), null, null)).willReturn(true); given(converter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(this.request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(this.request); HttpHeaders requestHeaders = new HttpHeaders(); given(this.request.getHeaders()).willReturn(requestHeaders); given(converter.canWrite(String.class, String.class, null)).willReturn(true); @@ -812,20 +801,17 @@ public class RestTemplateTests { HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.setContentType(MediaType.TEXT_PLAIN); responseHeaders.setContentLength(10); - given(response.getStatusCode()).willReturn(HttpStatus.OK); + given(response.getRawStatusCode()).willReturn(HttpStatus.OK.value()); + given(response.getStatusText()).willReturn(HttpStatus.OK.getReasonPhrase()); given(response.getHeaders()).willReturn(responseHeaders); given(response.getBody()).willReturn(new ByteArrayInputStream(Integer.toString(42).getBytes())); 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(response.getStatusCode()).willReturn(HttpStatus.OK); - HttpStatus status = HttpStatus.OK; - given(response.getStatusCode()).willReturn(status); - given(response.getStatusText()).willReturn(status.getReasonPhrase()); HttpHeaders entityHeaders = new HttpHeaders(); entityHeaders.set("MyHeader", "MyValue"); HttpEntity requestEntity = new HttpEntity<>(requestBody, entityHeaders); - ResponseEntity> result = template.exchange("http://example.com", HttpMethod.POST, requestEntity, intList); + ResponseEntity> result = template.exchange("http://example.com", POST, requestEntity, intList); assertEquals("Invalid POST result", expected, result.getBody()); assertEquals("Invalid Content-Type", MediaType.TEXT_PLAIN, result.getHeaders().getContentType()); assertEquals("Invalid Accept header", MediaType.TEXT_PLAIN_VALUE, requestHeaders.getFirst("Accept")); @@ -843,7 +829,7 @@ public class RestTemplateTests { }; template.setInterceptors(Collections.singletonList(interceptor)); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); given(request.execute()).willReturn(response); @@ -855,7 +841,7 @@ public class RestTemplateTests { HttpHeaders entityHeaders = new HttpHeaders(); entityHeaders.add("MyHeader", "MyEntityValue"); HttpEntity entity = new HttpEntity<>(null, entityHeaders); - template.exchange("http://example.com", HttpMethod.POST, entity, Void.class); + template.exchange("http://example.com", POST, entity, Void.class); assertThat(requestHeaders.get("MyHeader"), contains("MyEntityValue", "MyInterceptorValue")); verify(response).close(); @@ -871,7 +857,7 @@ public class RestTemplateTests { MediaType contentType = MediaType.TEXT_PLAIN; given(converter.canWrite(String.class, contentType)).willReturn(true); - given(requestFactory.createRequest(new URI("http://example.com"), HttpMethod.POST)).willReturn(request); + given(requestFactory.createRequest(new URI("http://example.com"), POST)).willReturn(request); String helloWorld = "Hello World"; HttpHeaders requestHeaders = new HttpHeaders(); given(request.getHeaders()).willReturn(requestHeaders); @@ -886,7 +872,7 @@ public class RestTemplateTests { entityHeaders.setContentType(contentType); entityHeaders.add("MyHeader", "MyEntityValue"); HttpEntity entity = new HttpEntity<>(helloWorld, entityHeaders); - template.exchange("http://example.com", HttpMethod.POST, entity, Void.class); + template.exchange("http://example.com", POST, entity, Void.class); assertThat(requestHeaders.get("MyHeader"), contains("MyEntityValue", "MyInterceptorValue")); verify(response).close();