@@ -215,14 +215,22 @@ func getExample(negotiator *ContentNegotiator, prefer string, op *openapi3.Opera
215215}
216216
217217// Load the OpenAPI document and create the router.
218- func load (uri string , data []byte ) (* openapi3.Swagger , * openapi3filter.Router ) {
218+ func load (uri string , data []byte ) (swagger * openapi3.Swagger , router * openapi3filter.Router , err error ) {
219+ defer func () {
220+ if r := recover (); r != nil {
221+ swagger = nil
222+ router = nil
223+ err = fmt .Errorf ("Caught panic while trying to load" )
224+ }
225+ }()
226+
219227 loader := openapi3 .NewSwaggerLoader ()
220228 loader .IsExternalRefsAllowed = true
221229
222230 swagger , err := loader .LoadSwaggerFromData (data )
223231
224232 if err != nil {
225- log . Fatal ( err )
233+ return
226234 }
227235
228236 if ! viper .GetBool ("validate-server" ) {
@@ -232,9 +240,9 @@ func load(uri string, data []byte) (*openapi3.Swagger, *openapi3filter.Router) {
232240 }
233241
234242 // Create a new router using the OpenAPI document's declared paths.
235- var router = openapi3filter .NewRouter ().WithSwagger (swagger )
243+ router = openapi3filter .NewRouter ().WithSwagger (swagger )
236244
237- return swagger , router
245+ return
238246}
239247
240248// server loads an OpenAPI file and runs a mock server using the paths and
@@ -297,7 +305,12 @@ func server(cmd *cobra.Command, args []string) {
297305 log .Fatal (err )
298306 }
299307
300- swagger , router = load (uri , data )
308+ if s , r , err := load (uri , data ); err == nil {
309+ swagger = s
310+ router = r
311+ } else {
312+ log .Printf ("ERROR: Unable to load OpenAPI document: %s" , err )
313+ }
301314 }
302315 case err , ok := <- watcher .Errors :
303316 if ! ok {
@@ -312,7 +325,10 @@ func server(cmd *cobra.Command, args []string) {
312325 }
313326 }
314327
315- swagger , router = load (uri , data )
328+ swagger , router , err = load (uri , data )
329+ if err != nil {
330+ log .Fatal (err )
331+ }
316332
317333 if strings .HasPrefix (uri , "http" ) {
318334 http .HandleFunc ("/__reload" , func (w http.ResponseWriter , r * http.Request ) {
@@ -332,7 +348,12 @@ func server(cmd *cobra.Command, args []string) {
332348 w .Write ([]byte ("error while parsing" ))
333349 return
334350 }
335- swagger , router = load (uri , data )
351+
352+ if s , r , err := load (uri , data ); err == nil {
353+ swagger = s
354+ router = r
355+ }
356+
336357 w .WriteHeader (200 )
337358 w .Write ([]byte ("reloaded" ))
338359 log .Printf ("Reloaded from %s" , uri )
0 commit comments