Skip to content

Commit b79d6f8

Browse files
author
rathnapandi
committed
- Fix issue #557
1 parent 90e16c6 commit b79d6f8

File tree

4 files changed

+24
-1
lines changed

4 files changed

+24
-1
lines changed

modules/apim-adapter/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@
103103
<groupId>org.testng</groupId>
104104
<artifactId>testng</artifactId>
105105
</dependency>
106+
<dependency>
107+
<groupId>io.swagger.parser.v3</groupId>
108+
<artifactId>swagger-parser</artifactId>
109+
</dependency>
106110
<dependency>
107111
<groupId>com.github.axway-api-management-plus.apim-cli</groupId>
108112
<artifactId>apimcli-tests</artifactId>

modules/apim-adapter/src/main/java/com/axway/apim/api/specification/OAS3xSpecification.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.axway.apim.api.API;
44
import com.axway.apim.api.specification.filter.JsonNodeOpenAPI3SpecFilter;
55
import com.axway.apim.lib.CoreParameters;
6+
import com.axway.apim.lib.EnvironmentProperties;
67
import com.axway.apim.lib.error.AppException;
78
import com.axway.apim.lib.error.ErrorCode;
89
import com.axway.apim.lib.error.InternalException;
@@ -12,6 +13,9 @@
1213
import com.fasterxml.jackson.databind.node.ArrayNode;
1314
import com.fasterxml.jackson.databind.node.ObjectNode;
1415
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
16+
import io.swagger.v3.parser.OpenAPIV3Parser;
17+
import io.swagger.v3.parser.core.models.ParseOptions;
18+
import io.swagger.v3.parser.core.models.SwaggerParseResult;
1519
import org.slf4j.Logger;
1620
import org.slf4j.LoggerFactory;
1721

@@ -151,6 +155,9 @@ public boolean parse(byte[] apiSpecificationContent) {
151155
try {
152156
this.apiSpecificationContent = apiSpecificationContent;
153157
setMapperForDataFormat();
158+
if(EnvironmentProperties.RESOLVE_OPENAPI_REF){
159+
this.apiSpecificationContent = resolveReferences(apiSpecificationContent);
160+
}
154161
if (this.mapper == null) return false;
155162
openApiNode = this.mapper.readTree(apiSpecificationContent);
156163
LOG.debug("openapi tag value : {}", openApiNode.get(OPENAPI));
@@ -163,6 +170,15 @@ public boolean parse(byte[] apiSpecificationContent) {
163170
}
164171
}
165172

173+
public byte[] resolveReferences(byte[] apiSpecificationContent) throws JsonProcessingException {
174+
OpenAPIV3Parser openAPIV3Parser = new OpenAPIV3Parser();
175+
ParseOptions parseOptions = new ParseOptions();
176+
parseOptions.setResolve(true); // Enable resolution of $ref references
177+
parseOptions.setFlatten(true);
178+
SwaggerParseResult swaggerParseResult = openAPIV3Parser.readContents(new String(apiSpecificationContent), null, parseOptions);
179+
return mapper.writeValueAsBytes(swaggerParseResult.getOpenAPI());
180+
}
181+
166182
@Override
167183
public boolean equals(Object other) {
168184
return super.equals(other);

modules/apim-adapter/src/main/java/com/axway/apim/lib/EnvironmentProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class EnvironmentProperties implements Map<String, String> {
2424
public static final boolean PRINT_CONFIG_CONSOLE = Boolean.parseBoolean(System.getenv().getOrDefault("print_console", FALSE));
2525
public static final boolean OVERRIDE_CERTIFICATES = Boolean.parseBoolean(System.getenv().getOrDefault("override_certificates", FALSE));
2626
public static final boolean CHECK_CATALOG = Boolean.parseBoolean(System.getenv().getOrDefault("check_catalog", FALSE));
27+
public static final boolean RESOLVE_OPENAPI_REF = Boolean.parseBoolean(System.getenv().getOrDefault("resolve_openapi_ref", FALSE));
2728
private static final Logger LOG = LoggerFactory.getLogger(EnvironmentProperties.class);
2829

2930
private final String stage;

modules/spectoconfig/src/main/java/com/axway/apim/config/GenerateTemplate.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public APIConfig generateTemplate(GenerateTemplateParameters parameters) throws
139139
List<AuthorizationValue> authorizationValues = new ArrayList<>();
140140
ParseOptions parseOptions = new ParseOptions();
141141
parseOptions.setResolve(true); // implicit
142+
parseOptions.setFlatten(true);
142143
String apiDefinition = parameters.getApiDefinition();
143144
URLParser urlParser = new URLParser(apiDefinition);
144145
String uri = urlParser.getUri();
@@ -150,7 +151,8 @@ public APIConfig generateTemplate(GenerateTemplateParameters parameters) throws
150151
AuthorizationValue authorizationValue = new AuthorizationValue(HttpHeaders.AUTHORIZATION, credential, "header");
151152
authorizationValues.add(authorizationValue);
152153
}
153-
SwaggerParseResult result = new OpenAPIV3Parser().readLocation(uri, authorizationValues, parseOptions);
154+
OpenAPIV3Parser parser = new OpenAPIV3Parser();
155+
SwaggerParseResult result = parser.readLocation(uri, authorizationValues, parseOptions);
154156
List<String> messages = result.getMessages();
155157
if (!messages.isEmpty()) {
156158
throw new AppException(messages.toString(), ErrorCode.UNSUPPORTED_API_SPECIFICATION);

0 commit comments

Comments
 (0)