package Ġde . z al ando . z ally . rule . z al ando Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . node . Object Node Ċ import Ġcom . google . common . io . Resources Ċ import Ġcom . types afe . config . Config Ċ import Ġde . z al ando . z ally . rule . Json Schema Validator Ċ import Ġde . z al ando . z ally . rule . Object Tree Reader Ċ import Ġde . z al ando . z ally . rule . api . Check Ċ import Ġde . z al ando . z ally . rule . api . Rule Ċ import Ġde . z al ando . z ally . rule . api . Severity Ċ import Ġde . z al ando . z ally . rule . api . Violation Ċ import Ġde . z al ando . z ally . util . ast . Json Pointers Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġjava . net . URL Ċ Ċ @ Rule ( ĊĠĠĠ Ġrule Set Ġ= ĠZ al ando Rule Set :: class , ĊĠĠĠ Ġid Ġ= Ġ" 1 0 1 ", ĊĠĠĠ Ġseverity Ġ= ĠSeverity . MUST , ĊĠĠĠ Ġtitle Ġ= Ġ" Provide ĠAPI ĠSpecification Ġusing ĠOpenAPI " Ċ ) Ċ open Ġclass ĠUse Open Api Rule (@ Autowired Ġrules Config : ĠConfig ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Use Open Api Rule :: class . java ) ĊĊĠĠĠ Ġopen Ġval Ġdescription Ġ= Ġ" Given Ġfile Ġis Ġnot ĠOpenAPI Ġ 2 . 0 Ġcompliant ." ĊĊĠĠĠ Ġprivate Ġval Ġjson Schema Validators : ĠList < Json Schema Validator > ĊĊĠĠĠ Ġprivate Ġval Ġdefault Schemas Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠPair (" Swagger Ġ 2 . 0 ", Ġ" schemas / openapi - 2 - schema . json "), ĊĠĠĠĠĠĠĠ ĠPair (" Open API Ġ 3 ", Ġ" schemas / openapi - 3 - schema . json ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Schema Validators Ġ= Ġget Schema Validators ( rules Config . getConfig ( java Class . simple Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Check ( severity Ġ= ĠSeverity . MUST ) ĊĠĠĠ Ġfun Ġvalidate ( swagger : ĠJsonNode ): ĠList < Violation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġviolations Ġ= Ġmutable ListOf < Violation >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( validator Ġin Ġjson Schema Validators ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalidator . validate ( swagger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vi olations . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviolations Ġ+= Ġresult . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVi olation (" Does Ġnot Ġmatch Ġ${ validator . name }: Ġ${ it . description }", Ġit . pointer Ġ?: ĠJson Pointers . empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġviolations ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Schema Validators ( rule Config : ĠConfig ): ĠList < Json Schema Validator > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule Config . getString List (" swagger _ schema _ urls "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= ĠObjectMapper (). read Tree ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( schema Ġas ĠObject Node ). remove (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Schema Validator ( it , Ġschema ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Unable Ġto Ġload Ġswagger Ġschemas : Ġ${ e . message }. ĠUsing Ġdefault Ġschemas Ġinstead .") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault Schema Validators () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Schema Validators (): ĠList < Json Schema Validator > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġdownload Swagger Schema Ġgradle Ġtask Ġcan Ġbe Ġused Ġto Ġdownload Ġlatest Ġversions Ġof Ġschemas ĊĠĠĠĠĠĠĠ Ġval Ġreferenced Online Schema Ġ= Ġ" http :// json - schema . org / draft - 0 4 / schema " ĊĠĠĠĠĠĠĠ Ġval Ġlocal Resource Ġ= ĠResources . getResource (" schemas / json - schema . json "). toString () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Schemas . map Ġ{ Ġ( name , Ġfile ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Url Ġ= ĠResources . getResource ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= ĠObject Tree Reader (). read ( schema Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Schema Validator ( name , Ġschema , Ġschema Redirect s Ġ= Ġmap Of ( referenced Online Schema Ġto Ġlocal Resource )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ