@@ -197,19 +197,36 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
197197 return result ;
198198 }
199199
200- protected List <SwaggerParserExtension > getExtensions () {
200+ /**
201+ * Locates extensions on the current thread class loader and then, if it differs
202+ * from this class classloader (as in OSGi), locates extensions from this
203+ * class classloader as well.
204+ *
205+ * @return a list of extensions
206+ */
207+ public static List <SwaggerParserExtension > getExtensions () {
208+ ClassLoader tccl = Thread .currentThread ().getContextClassLoader ();
209+ List <SwaggerParserExtension > extensions = getExtensions (tccl );
210+ ClassLoader cl = SwaggerParserExtension .class .getClassLoader ();
211+ if (cl != tccl ) {
212+ extensions .addAll (getExtensions (cl ));
213+ }
214+ extensions .add (0 , new OpenAPIV3Parser ());
215+ return extensions ;
216+ }
217+
218+ protected static List <SwaggerParserExtension > getExtensions (ClassLoader cl ) {
201219 List <SwaggerParserExtension > extensions = new ArrayList <>();
202220
203- ServiceLoader <SwaggerParserExtension > loader = ServiceLoader .load (SwaggerParserExtension .class );
221+ ServiceLoader <SwaggerParserExtension > loader = ServiceLoader .load (SwaggerParserExtension .class , cl );
204222 Iterator <SwaggerParserExtension > itr = loader .iterator ();
205223 while (itr .hasNext ()) {
206224 extensions .add (itr .next ());
207225 }
208- extensions .add (0 , new OpenAPIV3Parser ());
209226 return extensions ;
210227 }
211228
212- /**
229+ /**
213230 * Transform the swagger-model version of AuthorizationValue into a parser-specific one, to avoid
214231 * dependencies across extensions
215232 *
0 commit comments