Skip to content

Commit c50cf12

Browse files
committed
added inline parameter processing
1 parent 6857ebb commit c50cf12

File tree

2 files changed

+87
-13
lines changed

2 files changed

+87
-13
lines changed

modules/swagger-parser/src/main/java/io/swagger/parser/SwaggerResolver.java

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ public void applyResolutions(List<AuthorizationValue> auths) {
6262
Object mapping = ctx.object;
6363
Object target = ctx.parent;
6464
try {
65-
String contents = new RemoteUrl().urlToString(host, auths);
65+
String contents = null;
66+
if(host.startsWith("http"))
67+
contents = new RemoteUrl().urlToString(host, auths);
68+
else
69+
contents = Json.mapper().writeValueAsString(swagger);
6670
JsonNode location = null;
6771
String locationName = null;
6872
if(contents != null) {
@@ -94,6 +98,24 @@ else if(target instanceof Parameter) {
9498
swagger.addDefinition(locationName, model);
9599
}
96100
}
101+
else if(target instanceof Operation) {
102+
103+
// get the operation position
104+
Operation operation = (Operation) target;
105+
int position = 0;
106+
for(Parameter param : operation.getParameters()) {
107+
108+
if(param instanceof RefParameter) {
109+
RefParameter ref = (RefParameter) param;
110+
if(ref.getSimpleRef().equals(locationName)) {
111+
// found a match!
112+
Parameter remoteParam = Json.mapper().convertValue(location, Parameter.class);
113+
operation.getParameters().set(position, remoteParam);
114+
}
115+
}
116+
position += 1;
117+
}
118+
}
97119
}
98120
}
99121
catch(Exception e) {
@@ -102,7 +124,6 @@ else if(target instanceof Parameter) {
102124
}
103125
}
104126
}
105-
// Json.prettyPrint(resolutionMap);
106127
}
107128

108129
public void detectOperationRefs() {
@@ -113,14 +134,35 @@ public void detectOperationRefs() {
113134
Path path = paths.get(pathName);
114135
List<Operation> operations = path.getOperations();
115136
for(Operation operation : operations) {
116-
for(Parameter parameter : operation.getParameters()) {
117-
if(parameter instanceof BodyParameter) {
118-
BodyParameter bp = (BodyParameter) parameter;
119-
if(bp.getSchema() != null && bp.getSchema() instanceof RefModel) {
120-
RefModel ref = (RefModel)bp.getSchema();
121-
if(ref.get$ref().startsWith("http")) {
122-
LOGGER.debug("added reference to " + ref.get$ref());
123-
resolutionMap.put(ref.get$ref(), new ResolutionContext(ref, bp, "ref"));
137+
if(operation.getParameters() != null) {
138+
for(Parameter parameter : operation.getParameters()) {
139+
if(parameter instanceof BodyParameter) {
140+
BodyParameter bp = (BodyParameter) parameter;
141+
if(bp.getSchema() != null && bp.getSchema() instanceof RefModel) {
142+
RefModel ref = (RefModel)bp.getSchema();
143+
if(ref.get$ref().startsWith("http")) {
144+
LOGGER.debug("added reference to " + ref.get$ref());
145+
resolutionMap.put(ref.get$ref(), new ResolutionContext(ref, bp, "ref"));
146+
}
147+
}
148+
}
149+
else if(parameter instanceof RefParameter) {
150+
RefParameter ref = (RefParameter) parameter;
151+
LOGGER.debug("added reference to " + ref.get$ref());
152+
resolutionMap.put(ref.get$ref(), new ResolutionContext(ref, operation, "inline"));
153+
}
154+
}
155+
}
156+
if(operation.getResponses() != null) {
157+
for(String responseCode : operation.getResponses().keySet()) {
158+
Response response = operation.getResponses().get(responseCode);
159+
if(response.getSchema() != null) {
160+
Property schema = response.getSchema();
161+
if(schema instanceof RefProperty) {
162+
RefProperty ref = (RefProperty) schema;
163+
if(ref.get$ref() != null && ref.get$ref().startsWith("http")) {
164+
resolutionMap.put(ref.get$ref(), new ResolutionContext(ref, response, "ref"));
165+
}
124166
}
125167
}
126168
}

modules/swagger-parser/src/test/scala/SwaggerResolverTest.scala

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import scala.collection.JavaConverters._
1616

1717
@RunWith(classOf[JUnitRunner])
1818
class SwaggerResolverTest extends FlatSpec with Matchers {
19-
2019
it should "resolve a simple remote model property definition" in {
2120
val swagger = new Swagger()
2221
swagger.addDefinition(
@@ -60,14 +59,47 @@ class SwaggerResolverTest extends FlatSpec with Matchers {
6059
swagger.getDefinitions().get("Tag") should not be (null)
6160
}
6261

63-
it should "resolve operation remote refs" in {
62+
it should "resolve operation bodyparam remote refs" in {
6463
val swagger = new Swagger()
6564
swagger.path("/fun", new Path()
6665
.get(new Operation()
6766
.parameter(new BodyParameter()
6867
.schema(new RefModel("http://petstore.swagger.io/v2/swagger.json#/definitions/Tag")))))
6968

7069
val resolved = new SwaggerResolver().resolve(swagger, null)
71-
Json.prettyPrint(swagger)
70+
val param = swagger.getPaths().get("/fun").getGet().getParameters().get(0).asInstanceOf[BodyParameter]
71+
val ref = param.getSchema().asInstanceOf[RefModel]
72+
ref.get$ref() should equal("#/definitions/Tag")
73+
swagger.getDefinitions().get("Tag") should not be (null)
74+
}
75+
76+
it should "resolve response remote refs" in {
77+
val swagger = new Swagger()
78+
swagger.path("/fun", new Path()
79+
.get(new Operation()
80+
.response(200, new Response()
81+
.schema(new RefProperty("http://petstore.swagger.io/v2/swagger.json#/definitions/Tag")))))
82+
val resolved = new SwaggerResolver().resolve(swagger, null)
83+
val response = swagger.getPaths().get("/fun").getGet().getResponses().get("200")
84+
val ref = response.getSchema.asInstanceOf[RefProperty]
85+
ref.get$ref() should equal("#/definitions/Tag")
86+
swagger.getDefinitions().get("Tag") should not be (null)
87+
}
88+
89+
it should "resolve operation parameter remote refs" in {
90+
val swagger = new Swagger()
91+
swagger.path("/fun", new Path()
92+
.get(new Operation()
93+
.parameter(new RefParameter("#/parameters/SampleParameter"))))
94+
95+
swagger.parameter("SampleParameter", new QueryParameter()
96+
.name("skip")
97+
.property(new IntegerProperty()))
98+
99+
val resolved = new SwaggerResolver().resolve(swagger, null)
100+
val params = swagger.getPaths().get("/fun").getGet().getParameters()
101+
params.size() should be (1)
102+
val param = params.get(0).asInstanceOf[QueryParameter]
103+
param.getName() should be ("skip")
72104
}
73105
}

0 commit comments

Comments
 (0)