Skip to content

Commit 3ff3d03

Browse files
authored
Merge pull request #847 from ymohdriz/branch_issue844
Fix for issue 844
2 parents f211218 + 25c0d3f commit 3ff3d03

File tree

3 files changed

+77
-35
lines changed

3 files changed

+77
-35
lines changed

modules/swagger-parser/src/main/java/io/swagger/parser/util/RemoteUrl.java

+37-35
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import java.io.BufferedReader;
99
import java.io.InputStream;
1010
import java.io.InputStreamReader;
11-
import java.net.URI;
12-
import java.net.URL;
13-
import java.net.URLConnection;
14-
import java.net.URLEncoder;
11+
import java.net.*;
1512
import java.nio.charset.Charset;
1613
import java.nio.charset.StandardCharsets;
1714
import java.security.KeyManagementException;
@@ -95,42 +92,47 @@ public static String urlToString(String url, List<AuthorizationValue> auths) thr
9592
BufferedReader br = null;
9693

9794
try {
98-
final URL inUrl = new URL(cleanUrl(url));
99-
final List<AuthorizationValue> query = new ArrayList<>();
100-
final List<AuthorizationValue> header = new ArrayList<>();
101-
if (auths != null) {
102-
for (AuthorizationValue auth : auths) {
103-
if ("query".equals(auth.getType())) {
104-
appendValue(inUrl, auth, query);
105-
} else if ("header".equals(auth.getType())) {
106-
appendValue(inUrl, auth, header);
95+
URLConnection conn;
96+
do {
97+
final URL inUrl = new URL(cleanUrl(url));
98+
final List<AuthorizationValue> query = new ArrayList<>();
99+
final List<AuthorizationValue> header = new ArrayList<>();
100+
if (auths != null) {
101+
for (AuthorizationValue auth : auths) {
102+
if ("query".equals(auth.getType())) {
103+
appendValue(inUrl, auth, query);
104+
} else if ("header".equals(auth.getType())) {
105+
appendValue(inUrl, auth, header);
106+
}
107107
}
108108
}
109-
}
110-
final URLConnection conn;
111-
if (!query.isEmpty()) {
112-
final URI inUri = inUrl.toURI();
113-
final StringBuilder newQuery = new StringBuilder(inUri.getQuery() == null ? "" : inUri.getQuery());
114-
for (AuthorizationValue item : query) {
115-
if (newQuery.length() > 0) {
116-
newQuery.append("&");
109+
if (!query.isEmpty()) {
110+
final URI inUri = inUrl.toURI();
111+
final StringBuilder newQuery = new StringBuilder(inUri.getQuery() == null ? "" : inUri.getQuery());
112+
for (AuthorizationValue item : query) {
113+
if (newQuery.length() > 0) {
114+
newQuery.append("&");
115+
}
116+
newQuery.append(URLEncoder.encode(item.getKeyName(), UTF_8.name())).append("=")
117+
.append(URLEncoder.encode(item.getValue(), UTF_8.name()));
117118
}
118-
newQuery.append(URLEncoder.encode(item.getKeyName(), UTF_8.name())).append("=")
119-
.append(URLEncoder.encode(item.getValue(), UTF_8.name()));
119+
conn = new URI(inUri.getScheme(), inUri.getAuthority(), inUri.getPath(), newQuery.toString(),
120+
inUri.getFragment()).toURL().openConnection();
121+
} else {
122+
conn = inUrl.openConnection();
120123
}
121-
conn = new URI(inUri.getScheme(), inUri.getAuthority(), inUri.getPath(), newQuery.toString(),
122-
inUri.getFragment()).toURL().openConnection();
123-
} else {
124-
conn = inUrl.openConnection();
125-
}
126-
CONNECTION_CONFIGURATOR.process(conn);
127-
for (AuthorizationValue item : header) {
128-
conn.setRequestProperty(item.getKeyName(), item.getValue());
129-
}
124+
CONNECTION_CONFIGURATOR.process(conn);
125+
for (AuthorizationValue item : header) {
126+
conn.setRequestProperty(item.getKeyName(), item.getValue());
127+
}
128+
129+
conn.setRequestProperty("Accept", ACCEPT_HEADER_VALUE);
130+
conn.setRequestProperty("User-Agent", USER_AGENT_HEADER_VALUE);
131+
132+
conn.connect();
133+
url = ((HttpURLConnection) conn).getHeaderField("Location");
134+
} while (301 == ((HttpURLConnection) conn).getResponseCode());
130135

131-
conn.setRequestProperty("Accept", ACCEPT_HEADER_VALUE);
132-
conn.setRequestProperty("User-Agent", USER_AGENT_HEADER_VALUE);
133-
conn.connect();
134136
InputStream in = conn.getInputStream();
135137

136138
StringBuilder contents = new StringBuilder();

modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -1310,5 +1310,12 @@ public void testLoadExternalNestedDefinitions() throws Exception {
13101310
assertEquals("k-definition", definitions.get("k_2").getTitle());
13111311
}
13121312

1313+
@Test(description = "Parser not honoring redirect responses")
1314+
public void testIssue844() {
1315+
SwaggerParser parser = new SwaggerParser();
1316+
final SwaggerDeserializationResult swagger = parser.readWithInfo("src/test/resources/reusableParametersWithExternalRef.json", null, true);
1317+
assertNotNull(swagger.getSwagger());
1318+
assertEquals(swagger.getSwagger().getPath("/pets/{id}").getGet().getParameters().get(0).getIn(), "header");
1319+
}
13131320

13141321
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"swagger": "2.0",
3+
"info": {
4+
"version": "1.0.9-abcd",
5+
"title": "Swagger Sample API Reusable Parameters"
6+
},
7+
"host": "my.api.com",
8+
"basePath": "/v1",
9+
"schemes": [
10+
"http",
11+
"https"
12+
],
13+
"paths": {
14+
"/pets/{id}": {
15+
"get": {
16+
"description": "Returns pets based on ID",
17+
"summary": "Find pets by ID",
18+
"operationId": "getPetsById",
19+
"parameters": [
20+
{ "$ref": "http://docs.baikalplatform.com/common/v2.0/common.json#/parameters/x-correlator" }
21+
],
22+
"responses": {
23+
"200": {
24+
"description": "pet response"
25+
},
26+
"default": {
27+
"description": "error payload"
28+
}
29+
}
30+
}
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)