Skip to content

Commit 722048e

Browse files
committed
Introduce RequestCookie to avoid core depending on the Servlet API
Closes gh-345
1 parent ccb31ec commit 722048e

File tree

15 files changed

+111
-58
lines changed

15 files changed

+111
-58
lines changed

spring-restdocs-core/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ task jmustacheRepackJar(type: Jar) { repackJar ->
2727
dependencies {
2828
compile 'com.fasterxml.jackson.core:jackson-databind'
2929
compile 'org.springframework:spring-web'
30-
compile 'javax.servlet:javax.servlet-api'
3130
compile files(jmustacheRepackJar)
3231
jarjar 'com.googlecode.jarjar:jarjar:1.3'
3332
jmustache 'com.samskivert:jmustache@jar'

spring-restdocs-core/src/main/java/org/springframework/restdocs/cli/CliOperationRequest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@
2525
import java.util.Map.Entry;
2626
import java.util.Set;
2727

28-
import javax.servlet.http.Cookie;
29-
3028
import org.springframework.http.HttpHeaders;
3129
import org.springframework.http.HttpMethod;
3230
import org.springframework.restdocs.operation.OperationRequest;
3331
import org.springframework.restdocs.operation.OperationRequestPart;
3432
import org.springframework.restdocs.operation.Parameters;
33+
import org.springframework.restdocs.operation.RequestCookie;
3534
import org.springframework.util.Base64Utils;
3635

3736
/**
@@ -128,7 +127,7 @@ public URI getUri() {
128127
}
129128

130129
@Override
131-
public Collection<Cookie> getCookies() {
130+
public Collection<RequestCookie> getCookies() {
132131
return this.delegate.getCookies();
133132
}
134133

spring-restdocs-core/src/main/java/org/springframework/restdocs/cli/CurlRequestSnippet.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
import java.util.Map;
2424
import java.util.Map.Entry;
2525

26-
import javax.servlet.http.Cookie;
27-
2826
import org.springframework.http.HttpMethod;
2927
import org.springframework.restdocs.operation.Operation;
3028
import org.springframework.restdocs.operation.OperationRequest;
3129
import org.springframework.restdocs.operation.OperationRequestPart;
3230
import org.springframework.restdocs.operation.Parameters;
31+
import org.springframework.restdocs.operation.RequestCookie;
3332
import org.springframework.restdocs.snippet.Snippet;
3433
import org.springframework.restdocs.snippet.TemplatedSnippet;
3534
import org.springframework.util.CollectionUtils;
@@ -105,7 +104,7 @@ private String getOptions(Operation operation) {
105104
private void writeCookies(CliOperationRequest request, PrintWriter printer) {
106105
if (!CollectionUtils.isEmpty(request.getCookies())) {
107106
StringBuilder cookiesBuilder = new StringBuilder();
108-
for (Cookie cookie : request.getCookies()) {
107+
for (RequestCookie cookie : request.getCookies()) {
109108
if (cookiesBuilder.length() > 0) {
110109
cookiesBuilder.append(";");
111110
}

spring-restdocs-core/src/main/java/org/springframework/restdocs/cli/HttpieRequestSnippet.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@
2323
import java.util.Map;
2424
import java.util.Map.Entry;
2525

26-
import javax.servlet.http.Cookie;
27-
2826
import org.springframework.http.HttpHeaders;
2927
import org.springframework.http.HttpMethod;
3028
import org.springframework.http.MediaType;
3129
import org.springframework.restdocs.operation.Operation;
3230
import org.springframework.restdocs.operation.OperationRequest;
3331
import org.springframework.restdocs.operation.OperationRequestPart;
3432
import org.springframework.restdocs.operation.Parameters;
33+
import org.springframework.restdocs.operation.RequestCookie;
3534
import org.springframework.restdocs.snippet.Snippet;
3635
import org.springframework.restdocs.snippet.TemplatedSnippet;
3736
import org.springframework.util.StringUtils;
@@ -166,7 +165,7 @@ private void writeHeaders(OperationRequest request, PrintWriter writer) {
166165
}
167166

168167
private void writeCookies(OperationRequest request, PrintWriter writer) {
169-
for (Cookie cookie : request.getCookies()) {
168+
for (RequestCookie cookie : request.getCookies()) {
170169
writer.print(String.format(" 'Cookie:%s=%s'", cookie.getName(),
171170
cookie.getValue()));
172171
}

spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpRequestSnippet.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,18 @@
2424
import java.util.Map;
2525
import java.util.Map.Entry;
2626

27-
import javax.servlet.http.Cookie;
28-
2927
import org.springframework.http.HttpHeaders;
3028
import org.springframework.http.HttpMethod;
3129
import org.springframework.http.MediaType;
3230
import org.springframework.restdocs.operation.Operation;
3331
import org.springframework.restdocs.operation.OperationRequest;
3432
import org.springframework.restdocs.operation.OperationRequestPart;
3533
import org.springframework.restdocs.operation.Parameters;
34+
import org.springframework.restdocs.operation.RequestCookie;
3635
import org.springframework.restdocs.snippet.Snippet;
3736
import org.springframework.restdocs.snippet.TemplatedSnippet;
3837
import org.springframework.util.StringUtils;
3938

40-
4139
/**
4240
* A {@link Snippet} that documents an HTTP request.
4341
*
@@ -116,8 +114,9 @@ private List<Map<String, String>> getHeaders(OperationRequest request) {
116114
}
117115
}
118116

119-
for (Cookie cookie : request.getCookies()) {
120-
headers.add(header(HttpHeaders.COOKIE, String.format("%s=%s", cookie.getName(), cookie.getValue())));
117+
for (RequestCookie cookie : request.getCookies()) {
118+
headers.add(header(HttpHeaders.COOKIE,
119+
String.format("%s=%s", cookie.getName(), cookie.getValue())));
121120
}
122121

123122
if (requiresFormEncodingContentTypeHeader(request)) {

spring-restdocs-core/src/main/java/org/springframework/restdocs/operation/OperationRequest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import java.net.URI;
2020
import java.util.Collection;
2121

22-
import javax.servlet.http.Cookie;
23-
2422
import org.springframework.http.HttpHeaders;
2523
import org.springframework.http.HttpMethod;
2624

@@ -89,12 +87,12 @@ public interface OperationRequest {
8987
URI getUri();
9088

9189
/**
92-
* Returns {@link Cookie Cookies} sent with the request. If no cookies were sent an
93-
* empty collection is returned.
90+
* Returns the {@link RequestCookie cookies} sent with the request. If no cookies were
91+
* sent an empty collection is returned.
9492
*
9593
* @return the cookies, never {@code null}
9694
* @since 1.2.0
9795
*/
98-
Collection<Cookie> getCookies();
96+
Collection<RequestCookie> getCookies();
9997

10098
}

spring-restdocs-core/src/main/java/org/springframework/restdocs/operation/OperationRequestFactory.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import java.util.Collection;
2121
import java.util.Collections;
2222

23-
import javax.servlet.http.Cookie;
24-
2523
import org.springframework.http.HttpHeaders;
2624
import org.springframework.http.HttpMethod;
2725

@@ -48,8 +46,7 @@ public class OperationRequestFactory {
4846
*/
4947
public OperationRequest create(URI uri, HttpMethod method, byte[] content,
5048
HttpHeaders headers, Parameters parameters,
51-
Collection<OperationRequestPart> parts,
52-
Collection<Cookie> cookies) {
49+
Collection<OperationRequestPart> parts, Collection<RequestCookie> cookies) {
5350
return new StandardOperationRequest(uri, method, content,
5451
augmentHeaders(headers, uri, content), parameters, parts, cookies);
5552
}
@@ -70,7 +67,8 @@ public OperationRequest create(URI uri, HttpMethod method, byte[] content,
7067
public OperationRequest create(URI uri, HttpMethod method, byte[] content,
7168
HttpHeaders headers, Parameters parameters,
7269
Collection<OperationRequestPart> parts) {
73-
return create(uri, method, content, headers, parameters, parts, Collections.<Cookie>emptyList());
70+
return create(uri, method, content, headers, parameters, parts,
71+
Collections.<RequestCookie>emptyList());
7472
}
7573

7674
/**
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright 2014-2017 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.restdocs.operation;
18+
19+
/**
20+
* A representation of a Cookie received in a request.
21+
*
22+
* @author Andy Wilkinson
23+
* @since 1.2.0
24+
*/
25+
public final class RequestCookie {
26+
27+
private final String name;
28+
29+
private final String value;
30+
31+
/**
32+
* Creates a new {@code RequestCookie} with the given {@code name} and {@code value}.
33+
*
34+
* @param name the name of the cookie
35+
* @param value the value of the cookie
36+
*/
37+
public RequestCookie(String name, String value) {
38+
this.name = name;
39+
this.value = value;
40+
}
41+
42+
/**
43+
* Returns the name of the cookie.
44+
*
45+
* @return the name
46+
*/
47+
public String getName() {
48+
return this.name;
49+
}
50+
51+
/**
52+
* Returns the value of the cookie.
53+
*
54+
* @return the value
55+
*/
56+
public String getValue() {
57+
return this.value;
58+
}
59+
60+
}

spring-restdocs-core/src/main/java/org/springframework/restdocs/operation/StandardOperationRequest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import java.util.Collection;
2121
import java.util.Collections;
2222

23-
import javax.servlet.http.Cookie;
24-
2523
import org.springframework.http.HttpHeaders;
2624
import org.springframework.http.HttpMethod;
2725

@@ -41,7 +39,7 @@ class StandardOperationRequest extends AbstractOperationMessage
4139

4240
private URI uri;
4341

44-
private Collection<Cookie> cookies;
42+
private Collection<RequestCookie> cookies;
4543

4644
/**
4745
* Creates a new request with the given {@code uri} and {@code method}. The request
@@ -58,7 +56,7 @@ class StandardOperationRequest extends AbstractOperationMessage
5856
*/
5957
StandardOperationRequest(URI uri, HttpMethod method, byte[] content,
6058
HttpHeaders headers, Parameters parameters,
61-
Collection<OperationRequestPart> parts, Collection<Cookie> cookies) {
59+
Collection<OperationRequestPart> parts, Collection<RequestCookie> cookies) {
6260
super(content, headers);
6361
this.uri = uri;
6462
this.method = method;
@@ -88,7 +86,7 @@ public URI getUri() {
8886
}
8987

9088
@Override
91-
public Collection<Cookie> getCookies() {
89+
public Collection<RequestCookie> getCookies() {
9290
return this.cookies;
9391
}
9492

spring-restdocs-core/src/test/java/org/springframework/restdocs/test/OperationBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import java.util.List;
2626
import java.util.Map;
2727

28-
import javax.servlet.http.Cookie;
29-
3028
import org.junit.runners.model.Statement;
3129

3230
import org.springframework.http.HttpHeaders;
@@ -43,6 +41,7 @@
4341
import org.springframework.restdocs.operation.OperationResponse;
4442
import org.springframework.restdocs.operation.OperationResponseFactory;
4543
import org.springframework.restdocs.operation.Parameters;
44+
import org.springframework.restdocs.operation.RequestCookie;
4645
import org.springframework.restdocs.operation.StandardOperation;
4746
import org.springframework.restdocs.snippet.RestDocumentationContextPlaceholderResolverFactory;
4847
import org.springframework.restdocs.snippet.StandardWriterResolver;
@@ -156,7 +155,7 @@ public final class OperationRequestBuilder {
156155

157156
private List<OperationRequestPartBuilder> partBuilders = new ArrayList<>();
158157

159-
private Collection<Cookie> cookies = new ArrayList<>();
158+
private Collection<RequestCookie> cookies = new ArrayList<>();
160159

161160
private OperationRequestBuilder(String uri) {
162161
this.requestUri = URI.create(uri);
@@ -215,7 +214,7 @@ public OperationRequestPartBuilder part(String name, byte[] content) {
215214
}
216215

217216
public OperationRequestBuilder cookie(String name, String value) {
218-
this.cookies.add(new Cookie(name, value));
217+
this.cookies.add(new RequestCookie(name, value));
219218
return this;
220219
}
221220

spring-restdocs-mockmvc/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
description = 'Spring REST Docs MockMvc'
22

33
dependencies {
4+
compile 'javax.servlet:javax.servlet-api'
45
compile 'org.springframework:spring-test'
56
compile project(':spring-restdocs-core')
67
optional 'junit:junit'

spring-restdocs-mockmvc/src/main/java/org/springframework/restdocs/mockmvc/MockMvcRequestConverter.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@
2121
import java.io.StringWriter;
2222
import java.net.URI;
2323
import java.util.ArrayList;
24-
import java.util.Arrays;
2524
import java.util.Collection;
2625
import java.util.Collections;
2726
import java.util.List;
2827
import java.util.Map.Entry;
2928

3029
import javax.servlet.ServletException;
31-
import javax.servlet.http.Cookie;
3230
import javax.servlet.http.Part;
3331

3432
import org.springframework.http.HttpHeaders;
@@ -43,6 +41,7 @@
4341
import org.springframework.restdocs.operation.OperationRequestPartFactory;
4442
import org.springframework.restdocs.operation.Parameters;
4543
import org.springframework.restdocs.operation.RequestConverter;
44+
import org.springframework.restdocs.operation.RequestCookie;
4645
import org.springframework.util.FileCopyUtils;
4746
import org.springframework.util.StringUtils;
4847
import org.springframework.web.multipart.MultipartFile;
@@ -71,7 +70,7 @@ public OperationRequest convert(MockHttpServletRequest mockRequest) {
7170
HttpHeaders headers = extractHeaders(mockRequest);
7271
Parameters parameters = extractParameters(mockRequest);
7372
List<OperationRequestPart> parts = extractParts(mockRequest);
74-
Collection<Cookie> cookies = extractCookies(mockRequest);
73+
Collection<RequestCookie> cookies = extractCookies(mockRequest);
7574
String queryString = mockRequest.getQueryString();
7675
if (!StringUtils.hasText(queryString)
7776
&& "GET".equals(mockRequest.getMethod())) {
@@ -90,12 +89,16 @@ public OperationRequest convert(MockHttpServletRequest mockRequest) {
9089
}
9190
}
9291

93-
private Collection<Cookie> extractCookies(MockHttpServletRequest mockRequest) {
94-
if (mockRequest.getCookies() != null) {
95-
return Arrays.asList(mockRequest.getCookies());
92+
private Collection<RequestCookie> extractCookies(MockHttpServletRequest mockRequest) {
93+
if (mockRequest.getCookies() == null || mockRequest.getCookies().length == 0) {
94+
return Collections.emptyList();
9695
}
97-
98-
return Collections.emptyList();
96+
List<RequestCookie> cookies = new ArrayList<>();
97+
for (javax.servlet.http.Cookie servletCookie : mockRequest.getCookies()) {
98+
cookies.add(
99+
new RequestCookie(servletCookie.getName(), servletCookie.getValue()));
100+
}
101+
return cookies;
99102
}
100103

101104
private List<OperationRequestPart> extractParts(MockHttpServletRequest servletRequest)

0 commit comments

Comments
 (0)