diff --git a/src/main/jastadd/OpenAPISpecification.relast b/src/main/jastadd/OpenAPISpecification.relast index aec82e93449922c32596767376ad96469c7dfa42..98a7f8823eb39ed319f218e4681485fd2d1b136d 100644 --- a/src/main/jastadd/OpenAPISpecification.relast +++ b/src/main/jastadd/OpenAPISpecification.relast @@ -1,5 +1,5 @@ //OpenAPI Object -OpenAPIObject ::= <OpenAPI> <JsonSchemaDialect> [I:InfoObject] Serv:ServerObject* P:PathsObject* W:Webhook* [C:ComponentsObject] Sr:SecurityRequirementObject* T:TagObject* [E:ExternalDocObject] Ex:Extension* ; +OpenAPIObject ::= <OpenAPI> <JsonSchemaDialect> I:InfoObject Serv:ServerObject* P:PathsObject* W:Webhook* [C:ComponentsObject] Sr:SecurityRequirementObject* T:TagObject* [E:ExternalDocObject] Ex:Extension* ; Webhook ::= <Key> p:PathItemOb; //Info Object diff --git a/src/main/jastadd/ReverseParser.jrag b/src/main/jastadd/ReverseParser.jrag index 2fe0543346d2d8cedd8248713724b5502637a2b3..613673176faf24e2f0e1ded919721ac77fd67438 100644 --- a/src/main/jastadd/ReverseParser.jrag +++ b/src/main/jastadd/ReverseParser.jrag @@ -167,13 +167,8 @@ public static Components ComponentsObject.reverseComponents(ComponentsObject com if(componentsObject.getNumS()!=0){ Map<String, io.swagger.v3.oas.models.media.Schema>schemaMap=new HashMap<>(); SchemaOb s; - for(SchemaTuple t:componentsObject.getSList()){ - s=t.getO(); - if(s instanceof SchemaObject) - schemaMap.put(t.getKey(),((SchemaObject)s).reverseSchema(s)); - else - schemaMap.put(t.getKey(),((SchemaReference)s).reverseSchema(s)); - } + for(SchemaTuple t:componentsObject.getSList()) + schemaMap.put(t.getKey(), t.getO().reverseSchema(t.getO())); components.setSchemas(schemaMap); } if(componentsObject.getNumR()!=0){ @@ -733,6 +728,25 @@ public static io.swagger.v3.oas.models.tags.Tag TagObject.reverseTag(TagObject t io.swagger.v3.oas.models.media.Schema<Object> schema=new io.swagger.v3.oas.models.media.Schema<Object>(); SchemaObject s=(SchemaObject)schemaOb; + if(s.hasI()){ + schema = new ArraySchema(); + ((ArraySchema) schema).setItems(s.getI().getSchema().reverseSchema(s.getI().getSchema())); + } + if(s.getNumAll() != 0 || s.getNumAny() != 0 || s.getNumOne() != 0){ + schema = new ComposedSchema(); + if(s.getNumAll()!=0){ + for(AllOfSchema a:s.getAllList()) + ((ComposedSchema) schema).addAllOfItem(a.getSchema().reverseSchema(a.getSchema())); + } + if(s.getNumAny()!=0){ + for(AnyOfSchema a:s.getAnyList()) + ((ComposedSchema) schema).addAnyOfItem(a.getSchema().reverseSchema(a.getSchema())); + } + if(s.getNumOne()!=0){ + for(OneOfSchema o:s.getOneList()) + ((ComposedSchema) schema).addOneOfItem(o.getSchema().reverseSchema(o.getSchema())); + } + } if(s.getAdditionalProperties() != null) schema.setAdditionalProperties(s.getAdditionalProperties()); @@ -758,9 +772,6 @@ public static io.swagger.v3.oas.models.tags.Tag TagObject.reverseTag(TagObject t schema.setExternalDocs(ExternalDocObject.reverseExternalDocs(s.getExt())); if(!s.getFormat().isEmpty()) schema.setFormat(s.getFormat()); - System.out.println(s.getI().getSchema().toString()); - if(s.hasI()) - ((ArraySchema) schema).setItems(reverseSchema(s.getI().getSchema())); if(s.getMaximum()!=null) schema.setMaximum(s.getMaximum()); if(s.getMinimum()!=null) @@ -789,25 +800,13 @@ public static io.swagger.v3.oas.models.tags.Tag TagObject.reverseTag(TagObject t if(s.getNumP()!=0){ Map<String, io.swagger.v3.oas.models.media.Schema>properties=new HashMap<>(); for(PropertyItem p:s.getPList()) - properties.put(p.getName(), reverseSchema(p.getSchema())); + properties.put(p.getName(), p.getSchema().reverseSchema(p.getSchema())); schema.setProperties(properties); } if(s.getNumR()!=0){ for(RequiredField r:s.getRList()) schema.addRequiredItem(r.getValue()); } - if(s.getNumAll()!=0){ - for(AllOfSchema a:s.getAllList()) - ((ComposedSchema) schema).addAllOfItem(reverseSchema(a.getSchema())); - } - if(s.getNumAny()!=0){ - for(AnyOfSchema a:s.getAnyList()) - ((ComposedSchema) schema).addAnyOfItem(reverseSchema(a.getSchema())); - } - if(s.getNumOne()!=0){ - for(OneOfSchema o:s.getOneList()) - ((ComposedSchema) schema).addOneOfItem(reverseSchema(o.getSchema())); - } if(s.getReadOnly()!=null) schema.setReadOnly(s.getReadOnly()); if(s.getWriteOnly()!=null) diff --git a/src/test/java/openapi/OpenAPIMain_test.java b/src/test/java/openapi/OpenAPIMain_test.java index a033a7d1ce5cc659f76daa7a92b7397f8fad9d9f..70c888432d2d37397707fc99cb3d20ae2054b3f0 100644 --- a/src/test/java/openapi/OpenAPIMain_test.java +++ b/src/test/java/openapi/OpenAPIMain_test.java @@ -10,6 +10,7 @@ import io.swagger.parser.OpenAPIParser; import io.swagger.v3.core.util.Json; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.parser.OpenAPIV3Parser; +import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.SwaggerParseResult; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -58,6 +59,8 @@ public class OpenAPIMain_test { FileWriter actualWriter = new FileWriter((writerName.substring(0, writerName.length() - 5) + "-actual.json")); // parsed openAPI object with swagger-parser + ParseOptions options = new ParseOptions(); + options.setResolve(true); SwaggerParseResult result = new OpenAPIParser().readLocation(resource.getPath() + "/" + file, null, null); POJOOpenAPI = result.getOpenAPI(); System.out.println("Loading expression DSL file '" + file + "'."); @@ -77,11 +80,9 @@ public class OpenAPIMain_test { // OpenAPI in POJO to OpenAPI in JastAdd jastAddObject = OpenAPIObject.parseOpenAPI(POJOOpenAPI); - System.out.println(jastAddObject.getPList().getChild(0).getRef()); // OpenAPI in JastAdd to OpenAPI in POJO POJOOpenAPI = OpenAPIObject.reverseOpenAPI(jastAddObject); - System.out.println(POJOOpenAPI); // validation of transferred OpenAPI JsonNode actualNode = mapper.readTree(Json.mapper().writeValueAsString(POJOOpenAPI));