Skip to content

Converter to v3: broken references #799

@jmini

Description

@jmini

When parsing this spec: v1beta3.json. This spec is using an old version: "swaggerVersion": "1.2"

With this code:

OpenAPIParser openApiParser = new OpenAPIParser();
ParseOptions options = new ParseOptions();
options.setResolve(true);
options.setFlatten(true);

OpenAPI openAPI = openApiParser.readLocation(inputSpec, null, options).getOpenAPI();
String string = Yaml.mapper().writerWithDefaultPrettyPrinter().writeValueAsString(openAPI);

System.out.println(string);

I have noticed following regression between version 2.0.1 and 2.0.2:

--- a/converted.yaml (version 2.0.1)
+++ b/converted.yaml (version 2.0.2)
@@ -32,7 +32,7 @@
           content:
             application/json:
               schema:
-                $ref: "#/components/schemas/v1beta3.Binding"
+                $ref: "v1beta3.Binding"
                 extensions: {}
           extensions: {}
       extensions: {}
@@ -66,7 +66,7 @@
           content:
             application/json:
               schema:
-                $ref: "#/components/schemas/v1beta3.ComponentStatus"
+                $ref: "v1beta3.ComponentStatus"
                 extensions: {}
           extensions: {}
       extensions: {}
@@ -125,7 +125,7 @@
           content:
             application/json:
               schema:
-                $ref: "#/components/schemas/v1beta3.ComponentStatusList"
+                $ref: "v1beta3.ComponentStatusList"
                 extensions: {}
           extensions: {}
       extensions: {}
@@ -144,14 +144,14 @@
           description: "list of component conditions observed"
           extensions: {}
           items:
-            $ref: "#/components/schemas/v1beta3.ObjectReference"
+            $ref: "v1beta3.ObjectReference"
             extensions: {}
         kind:
           type: "string"
           description: "kind of object, in CamelCase; cannot be updated"
           extensions: {}
         metadata:
-          $ref: "#/components/schemas/v1beta3.ObjectMeta"
+          $ref: "v1beta3.ObjectMeta"
           extensions: {}
     v1beta3.ObjectMeta:
       type: "object"
@@ -218,14 +218,14 @@
           description: "list of component status objects"
           extensions: {}
           items:
-            $ref: "#/components/schemas/v1beta3.ComponentStatus"
+            $ref: "v1beta3.ComponentStatus"
             extensions: {}
         kind:
           type: "string"
           description: "kind of object, in CamelCase; cannot be updated"
           extensions: {}
         metadata:
-          $ref: "#/components/schemas/v1beta3.ObjectMeta"
+          $ref: "v1beta3.ObjectMeta"
           extensions: {}
     v1beta3.Binding:
       required:
@@ -241,10 +241,10 @@
           description: "kind of object, in CamelCase; cannot be updated"
           extensions: {}
         metadata:
-          $ref: "#/components/schemas/v1beta3.ObjectMeta"
+          $ref: "v1beta3.ObjectMeta"
           extensions: {}
         target:
-          $ref: "#/components/schemas/v1beta3.ObjectReference"
+          $ref: "v1beta3.ObjectReference"
           extensions: {}
     v1beta3.ObjectReference:
       type: "object"

If you validate the converted yaml file, you get an error like this:

Invalid Reference - Unable to resolve the reference. The value must be a valid JSON Reference (for external references) or JSON Pointer (for local references), and must resolve to an object of the expected type.


This is a big regression. I think the problem is located in version 1.0.37 of io.swagger:swagger-parser. If you force maven to use the previous version like this:

    <dependency>
      <groupId>io.swagger.parser.v3</groupId>
      <artifactId>swagger-parser</artifactId>
      <version>2.0.2</version>
    </dependency>
    <dependency>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-parser</artifactId>
      <version>1.0.36</version>
    </dependency>

The references in the converted document are correct.


Maven GAV:

    <dependency>
      <groupId>io.swagger.parser.v3</groupId>
      <artifactId>swagger-parser</artifactId>
      <version>2.0.2</version>
    </dependency>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions