Skip to content

Commit 02ed6b3

Browse files
committed
OpenAPIV3Parser#getExtensions() not finding extensions on OSGi #1003 (Applying same treatment to OpenAPIParser)
1 parent e1f907d commit 02ed6b3

File tree

3 files changed

+20
-18
lines changed

3 files changed

+20
-18
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
204204
*
205205
* @return a list of extensions
206206
*/
207-
protected List<SwaggerParserExtension> getExtensions() {
207+
public static List<SwaggerParserExtension> getExtensions() {
208208
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
209209
List<SwaggerParserExtension> extensions = getExtensions(tccl);
210210
ClassLoader cl = SwaggerParserExtension.class.getClassLoader();
@@ -215,7 +215,7 @@ protected List<SwaggerParserExtension> getExtensions() {
215215
return extensions;
216216
}
217217

218-
protected List<SwaggerParserExtension> getExtensions(ClassLoader cl) {
218+
protected static List<SwaggerParserExtension> getExtensions(ClassLoader cl) {
219219
List<SwaggerParserExtension> extensions = new ArrayList<>();
220220

221221
ServiceLoader<SwaggerParserExtension> loader = ServiceLoader.load(SwaggerParserExtension.class, cl);

modules/swagger-parser/src/main/java/io/swagger/parser/OpenAPIParser.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@
66
import io.swagger.v3.parser.core.models.SwaggerParseResult;
77
import io.swagger.v3.parser.OpenAPIV3Parser;
88

9-
import java.util.ArrayList;
10-
import java.util.Iterator;
119
import java.util.List;
12-
import java.util.ServiceLoader;
1310

1411
public class OpenAPIParser {
1512
public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth, ParseOptions options) {
1613
SwaggerParseResult output = null;
1714

18-
for(SwaggerParserExtension extension : getExtensions()) {
15+
for(SwaggerParserExtension extension : OpenAPIV3Parser.getExtensions()) {
1916
output = extension.readLocation(url, auth, options);
2017
if(output != null && output.getOpenAPI() != null) {
2118
return output;
@@ -28,7 +25,7 @@ public SwaggerParseResult readLocation(String url, List<AuthorizationValue> auth
2825
public SwaggerParseResult readContents(String swaggerAsString, List<AuthorizationValue> auth, ParseOptions options) {
2926
SwaggerParseResult output = null;
3027

31-
for(SwaggerParserExtension extension : getExtensions()) {
28+
for(SwaggerParserExtension extension : OpenAPIV3Parser.getExtensions()) {
3229
output = extension.readContents(swaggerAsString, auth, options);
3330
if(output != null && output.getOpenAPI() != null) {
3431
return output;
@@ -38,15 +35,4 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
3835
return output;
3936
}
4037

41-
protected List<SwaggerParserExtension> getExtensions() {
42-
List<SwaggerParserExtension> extensions = new ArrayList<>();
43-
44-
ServiceLoader<SwaggerParserExtension> loader = ServiceLoader.load(SwaggerParserExtension.class);
45-
Iterator<SwaggerParserExtension> itr = loader.iterator();
46-
while (itr.hasNext()) {
47-
extensions.add(itr.next());
48-
}
49-
extensions.add(0, new OpenAPIV3Parser());
50-
return extensions;
51-
}
5238
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,5 +481,21 @@ public void testIssue959() {
481481

482482
}
483483

484+
@Test
485+
public void testIssue1003_ExtensionsClassloader() {
486+
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
487+
SwaggerParseResult api = null;
488+
try {
489+
// Temporarily switch tccl to an unproductive cl
490+
final ClassLoader tcclTemp = new java.net.URLClassLoader(new java.net.URL[] {},
491+
ClassLoader.getSystemClassLoader());
492+
Thread.currentThread().setContextClassLoader(tcclTemp);
493+
api = new OpenAPIParser().readLocation("src/test/resources/petstore.yaml",null,null);
494+
} finally {
495+
Thread.currentThread().setContextClassLoader(tccl);
496+
}
497+
assertNotNull(api);
498+
}
499+
484500
}
485501

0 commit comments

Comments
 (0)