Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.swagger.parser;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.swagger.models.ArrayModel;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
Expand All @@ -19,6 +21,7 @@
import io.swagger.models.properties.RefProperty;
import io.swagger.parser.util.RemoteUrl;
import io.swagger.util.Json;
import io.swagger.util.Yaml;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -85,7 +88,13 @@ public void applyResolutions(List<AuthorizationValue> auths) {
JsonNode location = null;
String locationName = null;
if (contents != null) {
location = Json.mapper().readTree(contents);
ObjectMapper mapper;
if (contents.trim().startsWith("{")) {
mapper = Json.mapper();
} else {
mapper = Yaml.mapper();
}
location = mapper.readTree(contents);
String[] objectPath = definitionPath.split("/");
for (String objectPathPart : objectPath) {
LOGGER.debug("getting part " + objectPathPart);
Expand Down
69 changes: 69 additions & 0 deletions modules/swagger-parser/src/test/scala/SwaggerResolverTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve a simple remote model property definition in yaml" in {
val swagger = new Swagger()
swagger.addDefinition(
"Sample", new ModelImpl()
.property("remoteRef", new RefProperty("http://petstore.swagger.io/v2/swagger.yaml#/definitions/Tag")))

val resolved = new SwaggerResolver().resolve(swagger, null)
val prop = resolved.getDefinitions().get("Sample").getProperties().get("remoteRef")
prop.isInstanceOf[RefProperty] should be(true)
val ref = prop.asInstanceOf[RefProperty]
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve an array remote model property definition" in {
val swagger = new Swagger()
swagger.addDefinition(
Expand All @@ -37,6 +51,21 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve an array remote model property definition in yaml" in {
val swagger = new Swagger()
swagger.addDefinition(
"Sample", new ModelImpl()
.property("remoteRef", new ArrayProperty(new RefProperty("http://petstore.swagger.io/v2/swagger.yaml#/definitions/Tag"))))

val resolved = new SwaggerResolver().resolve(swagger, null)
val prop = resolved.getDefinitions().get("Sample").getProperties().get("remoteRef")
prop.isInstanceOf[ArrayProperty] should be(true)
val ap = prop.asInstanceOf[ArrayProperty]
val ref = ap.getItems().asInstanceOf[RefProperty]
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve an map remote model property definition" in {
val swagger = new Swagger()
swagger.addDefinition(
Expand All @@ -51,6 +80,20 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve an map remote model property definition in yaml" in {
val swagger = new Swagger()
swagger.addDefinition(
"Sample", new ModelImpl()
.property("remoteRef", new MapProperty(new RefProperty("http://petstore.swagger.io/v2/swagger.yaml#/definitions/Tag"))))
val resolved = new SwaggerResolver().resolve(swagger, null)
val prop = resolved.getDefinitions().get("Sample").getProperties().get("remoteRef")
prop.isInstanceOf[MapProperty] should be(true)
val ap = prop.asInstanceOf[MapProperty]
val ref = ap.getAdditionalProperties().asInstanceOf[RefProperty]
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve operation bodyparam remote refs" in {
val swagger = new Swagger()
swagger.path("/fun", new Path()
Expand All @@ -65,6 +108,19 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve operation bodyparam remote refs in yaml" in {
val swagger = new Swagger()
swagger.path("/fun", new Path()
.get(new Operation()
.parameter(new BodyParameter()
.schema(new RefModel("http://petstore.swagger.io/v2/swagger.yaml#/definitions/Tag")))))

val resolved = new SwaggerResolver().resolve(swagger, null)
val param = swagger.getPaths().get("/fun").getGet().getParameters().get(0).asInstanceOf[BodyParameter]
val ref = param.getSchema().asInstanceOf[RefModel]
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve operation parameter remote refs" in {
val swagger = new Swagger()
Expand Down Expand Up @@ -119,5 +175,18 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}

it should "resolve response remote refs in yaml" in {
val swagger = new Swagger()
swagger.path("/fun", new Path()
.get(new Operation()
.response(200, new Response()
.schema(new RefProperty("http://petstore.swagger.io/v2/swagger.yaml#/definitions/Tag")))))
val resolved = new SwaggerResolver().resolve(swagger, null)
val response = swagger.getPaths().get("/fun").getGet().getResponses().get("200")
val ref = response.getSchema.asInstanceOf[RefProperty]
ref.get$ref() should equal("#/definitions/Tag")
swagger.getDefinitions().get("Tag") should not be (null)
}
}

2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@
<commons-io-version>2.4</commons-io-version>
<scala-version>2.10.4</scala-version>
<slf4j-version>1.6.3</slf4j-version>
<swagger-core-version>1.5.0</swagger-core-version>
<swagger-core-version>1.5.1-SNAPSHOT</swagger-core-version>
<junit-version>4.8.1</junit-version>
<scala-test-version>2.1.3</scala-test-version>
</properties>
Expand Down