Eric
Eric

Reputation: 181

Retrieving "$ref" field in swagger.json

I am trying to use the swagger parser to parse and retrieve information in the "swagger.json" (io.swagger.parser.SwaggerParser;)

Below is an excerpt of the "swagger.json". I am trying to retrieve "$ref" : "#/definitions/abc".

    "responses" : {
      "200" : {
        "description" : "abc",
        "schema" : {
          "$ref" : "#/definitions/abc"
        }
      },

This is the code to parse it.

    SwaggerParser sparse = new SwaggerParser();
    Swagger swagger = sparse.read("swagger.json");

// This next line is what I am having a problem with. swagger.getPath("/endpointurl").getGet().getResponses().get("200").getSchema();

At this point, the ".getSchema()" in the above line has only "getType()" in it I can call. It doesn't have "get$ref()". This is because ".getSchema()" returns a "Property" (io.swagger.models.properties.Property). It doesn't have "get$ref()".

get$ref() is available in "RefProperty" (io.swagger.models.properties.RefProperty)

But ".getSchema()" doesn't return a "RefProperty". Typecast the result of ".getSchema()" to a "RefProperty" also doesn't work. It ends up in this error. java.lang.ClassCastException: io.swagger.models.properties.ArrayProperty cannot be cast to io.swagger.models.properties.RefProperty

Has anyone tried parsing a "swagger.json" and was able to retrieve the "$ref": line under "schema" in the "response" block?

Any idea how might I be able to do that?

Upvotes: 2

Views: 1300

Answers (1)

Eric
Eric

Reputation: 181

I figured out a way to do that. Maybe not the best way to do it, but it retrieves the information in "#ref".

        Object obj = xxxxx.getSchema(); // xxxxx is whatever your code that gives you ".getSchema()". Mine is in a map and I don't want to distract people.

        ArrayProperty arrProp = new ArrayProperty();

        arrProp = (ArrayProperty)obj; // .getSchema() returns an ArrayProperty

        RefProperty refProperty = (RefProperty) arrProp.getItems(); // .getItems() will return the RefProperty type you need to call ".get$ref()".
        String refStr = refProperty.get$ref(); // Voila, there's your content in "#ref".
        String simpleRefStr = refProperty.getSimpleRef();

I had to do a few type castings. If you have a more elegant way of doing this, please post here.

Upvotes: 0

Related Questions