1111package com .networknt .oas ;
1212
1313import com .fasterxml .jackson .databind .JsonNode ;
14- import com .networknt .oas .jsonoverlay .JsonLoader ;
15- import com .networknt .oas .jsonoverlay .ReferenceRegistry ;
16- import com .networknt .oas .jsonoverlay .ResolutionBaseRegistry ;
17- import com .networknt .oas .jsonoverlay .Resolver ;
14+ import com .networknt .jsonoverlay .JsonLoader ;
15+ import com .networknt .jsonoverlay .ReferenceManager ;
16+ import com .networknt .oas .model .OpenApi3 ;
1817import com .networknt .oas .model .impl .OpenApi3Impl ;
1918
2019import java .io .File ;
2524
2625public class OpenApiParser {
2726
28- public OpenApiParser () {
29- }
30-
3127 public OpenApi <?> parse (String spec , URL resolutionBase ) {
3228 return parse (spec , resolutionBase , true );
3329 }
3430
3531 public OpenApi <?> parse (String spec , URL resolutionBase , boolean validate ) {
3632 try {
37- JsonLoader jsonLoader = new JsonLoader ();
38- JsonNode tree = jsonLoader .loadString (resolutionBase , spec );
39- ResolutionBaseRegistry resolutionBaseRegistry = new ResolutionBaseRegistry (jsonLoader );
40- resolutionBaseRegistry .register (resolutionBase .toString (), tree );
41- return parse (resolutionBase , validate , resolutionBaseRegistry );
33+ JsonLoader loader = new JsonLoader ();
34+ JsonNode tree = loader .loadString (resolutionBase , spec );
35+ return parse (tree , resolutionBase , validate , loader );
36+
4237 } catch (IOException e ) {
43- throw new SwaggerParserException ("Failed to parse spec as JSON or YAML" , e );
38+ throw new OpenApiParserException ("Failed to parse spec as JSON or YAML" , e );
4439 }
4540 }
4641
47- public OpenApi <?> parse (File specFile ) {
42+ public OpenApi <?> parse (File specFile ) throws Exception {
4843 return parse (specFile , true );
4944 }
5045
51- public OpenApi <?> parse (File specFile , boolean validate ) {
46+ public OpenApi <?> parse (File specFile , boolean validate ) throws Exception {
5247 try {
5348 return parse (specFile .toURI ().toURL (), validate );
5449 } catch (IOException e ) {
55- throw new SwaggerParserException ("Failed to read spec from file" , e );
50+ throw new OpenApiParserException ("Failed to read spec from file" , e );
5651 }
5752 }
5853
59- public OpenApi <?> parse (URI uri ) {
54+ public OpenApi <?> parse (URI uri ) throws Exception {
6055 return parse (uri , true );
6156 }
6257
63- public OpenApi <?> parse (URI uri , boolean validate ) {
58+ public OpenApi <?> parse (URI uri , boolean validate ) throws Exception {
6459 try {
6560 return parse (uri .toURL (), validate );
6661 } catch (MalformedURLException e ) {
67- throw new SwaggerParserException ("Invalid URI for Swagger spec" , e );
62+ throw new OpenApiParserException ("Invalid URI for Swagger spec" , e );
6863 }
6964 }
7065
71- public OpenApi <?> parse (URL resolutionBase ) {
66+ public OpenApi <?> parse (URL resolutionBase ) throws Exception {
7267 return parse (resolutionBase , true );
7368 }
7469
75- public OpenApi <?> parse (URL resolutionBase , boolean validate ) {
76- return parse (resolutionBase , validate , new ResolutionBaseRegistry (new JsonLoader ()));
70+ public OpenApi <?> parse (URL resolutionBase , boolean validate ) throws Exception {
71+ ReferenceManager manager = new ReferenceManager (resolutionBase );
72+ return parse (manager , validate );
7773 }
7874
79- protected OpenApi <?> parse (URL resolutionBase , boolean validate , ResolutionBaseRegistry resolutionBaseRegistry ) {
75+ public OpenApi <?> parse (JsonNode tree , URL resolutionBase ) {
76+ return parse (tree , resolutionBase , true );
77+ }
78+
79+ public OpenApi <?> parse (JsonNode tree , URL resolutionBase , boolean validate ) {
80+ return parse (tree , resolutionBase , validate , null );
81+ }
82+
83+ public OpenApi <?> parse (JsonNode tree , URL resolutionBase , boolean validate , JsonLoader loader ) {
84+ ReferenceManager manager = new ReferenceManager (resolutionBase , tree , loader );
85+ return parse (manager , validate );
86+ }
87+
88+ private OpenApi <?> parse (ReferenceManager manager , boolean validate ) {
89+ JsonNode tree ;
8090 try {
81- ReferenceRegistry referenceRegistry = new ReferenceRegistry ();
82- new Resolver (referenceRegistry , resolutionBaseRegistry ).preresolve (resolutionBase );
83- JsonNode tree = resolutionBaseRegistry .get (resolutionBase .toString ()).getJson ();
91+ tree = manager .loadDoc ();
8492 if (isVersion3 (tree )) {
85- OpenApi3Impl model = new OpenApi3Impl (tree , null , referenceRegistry );
93+ OpenApi3 model = (OpenApi3 ) OpenApi3Impl .factory .create (tree , null , manager );
94+ ((OpenApi3Impl ) model )._setCreatingRef (manager .getDocReference ());
8695 if (validate ) {
8796 model .validate ();
8897 }
8998 return model ;
9099 } else {
91- throw new SwaggerParserException (
92- "Could not determine OpenApi version - missing or invalid 'openapi' or 'swagger ' property" );
100+ throw new OpenApiParserException (
101+ "Could not determine OpenApi version from model: no 'openapi' property" );
93102 }
94- } catch (Exception e ) {
95- // throw new SwaggerParserException("Failed to parse Swagger spec", e);
96- throw e ;
103+ } catch (IOException e ) {
104+ throw new OpenApiParserException ("Failed to parse model" , e );
97105 }
98-
99106 }
100107
101108 protected boolean isVersion3 (JsonNode tree ) {
102109 JsonNode versionNode = tree .path ("openapi" );
103110 return versionNode .isTextual () && versionNode .asText ().startsWith ("3." );
104111 }
105112
106- public static class SwaggerParserException extends RuntimeException {
113+ public static class OpenApiParserException extends RuntimeException {
107114
108115 private static final long serialVersionUID = 1L ;
109116
110- public SwaggerParserException () {
117+ public OpenApiParserException () {
111118 super ();
112119 }
113120
114- public SwaggerParserException (String message , Throwable cause , boolean enableSuppression ,
121+ public OpenApiParserException (String message , Throwable cause , boolean enableSuppression ,
115122 boolean writableStackTrace ) {
116123 super (message , cause , enableSuppression , writableStackTrace );
117124 }
118125
119- public SwaggerParserException (String message , Throwable cause ) {
126+ public OpenApiParserException (String message , Throwable cause ) {
120127 super (message , cause );
121128 }
122129
123- public SwaggerParserException (String message ) {
130+ public OpenApiParserException (String message ) {
124131 super (message );
125132 }
126133
127- public SwaggerParserException (Throwable cause ) {
134+ public OpenApiParserException (Throwable cause ) {
128135 super (cause );
129136 }
130137 }
131- }
138+ }
0 commit comments