added UrlTemplates from swagger to api def
This commit is contained in:
parent
5b5ce421d5
commit
0176e0ce90
5
pom.xml
5
pom.xml
@ -44,6 +44,11 @@
|
|||||||
<version>1.18.38</version>
|
<version>1.18.38</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.apimgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.apimgt.impl</artifactId>
|
||||||
|
<version>9.31.86</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@ -35,9 +35,8 @@ public abstract class AbstractProcess {
|
|||||||
protected static final String PARAM_SOURCE_APIM = "source_apim";
|
protected static final String PARAM_SOURCE_APIM = "source_apim";
|
||||||
protected static final String VERSION_32 = "v32";
|
protected static final String VERSION_32 = "v32";
|
||||||
|
|
||||||
protected static ObjectMapper mapper;
|
public static ObjectMapper mapper;
|
||||||
|
public static ObjectMapper mapperYaml;
|
||||||
protected static ObjectMapper mapperYaml;
|
|
||||||
|
|
||||||
protected ConfigManager config = ConfigManager.getInstance();
|
protected ConfigManager config = ConfigManager.getInstance();
|
||||||
|
|
||||||
@ -47,6 +46,7 @@ public abstract class AbstractProcess {
|
|||||||
YAMLFactory yamlFactory = new YAMLFactory();
|
YAMLFactory yamlFactory = new YAMLFactory();
|
||||||
yamlFactory.configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false);
|
yamlFactory.configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false);
|
||||||
yamlFactory.configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true);
|
yamlFactory.configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true);
|
||||||
|
yamlFactory.configure(YAMLGenerator.Feature.SPLIT_LINES, false);
|
||||||
mapperYaml = new ObjectMapper(yamlFactory);
|
mapperYaml = new ObjectMapper(yamlFactory);
|
||||||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
|
||||||
|
|||||||
@ -2,10 +2,10 @@ package cz.trask.migration.impl.v45;
|
|||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -15,6 +15,9 @@ import java.util.zip.ZipOutputStream;
|
|||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.wso2.carbon.apimgt.api.APIDefinition;
|
||||||
|
import org.wso2.carbon.apimgt.api.model.URITemplate;
|
||||||
|
import org.wso2.carbon.apimgt.impl.definitions.OASParserUtil;
|
||||||
|
|
||||||
import cz.trask.migration.AbstractProcess;
|
import cz.trask.migration.AbstractProcess;
|
||||||
import cz.trask.migration.mapper.ApiDefinitionMapper;
|
import cz.trask.migration.mapper.ApiDefinitionMapper;
|
||||||
@ -161,13 +164,17 @@ public class ExportToWso2FromV32 extends AbstractProcess {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] prepareApiZipFile32to45(RegistryClient client, SearchedVersion ver,
|
public static byte[] prepareApiZipFile32to45(RegistryClient client, SearchedVersion ver,
|
||||||
List<ArtifactReference> ref) throws IOException {
|
List<ArtifactReference> ref) throws Exception {
|
||||||
|
|
||||||
String baseDir = ver.getName() + "-" + ver.getVersion() + "/";
|
String baseDir = ver.getName() + "-" + ver.getVersion() + "/";
|
||||||
|
|
||||||
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
ZipOutputStream zos = new ZipOutputStream(baos)) {
|
ZipOutputStream zos = new ZipOutputStream(baos)) {
|
||||||
|
|
||||||
|
ApiDefinition32 apiDef = null;
|
||||||
|
APIDefinition openApiParser = null;
|
||||||
|
String contentStr = null;
|
||||||
|
|
||||||
for (ArtifactReference r : ref) {
|
for (ArtifactReference r : ref) {
|
||||||
log.info(" - Reference: {} {} {}", r.getGroupId(), r.getArtifactId(), r.getVersion());
|
log.info(" - Reference: {} {} {}", r.getGroupId(), r.getArtifactId(), r.getVersion());
|
||||||
|
|
||||||
@ -187,10 +194,17 @@ public class ExportToWso2FromV32 extends AbstractProcess {
|
|||||||
byte[] content = client.getContentByGlobalId(amd.getGlobalId()).readAllBytes();
|
byte[] content = client.getContentByGlobalId(amd.getGlobalId()).readAllBytes();
|
||||||
|
|
||||||
if (FileType.APIDEF.toString().equals(amd.getGroupId())) {
|
if (FileType.APIDEF.toString().equals(amd.getGroupId())) {
|
||||||
ApiDefinition32 apiDef = mapperYaml.readValue(content, ApiDefinition32.class);
|
apiDef = mapperYaml.readValue(content, ApiDefinition32.class);
|
||||||
ApiDefinition45 apiDef45 = ApiDefinitionMapper.map(apiDef);
|
} else if (FileType.OPENAPI.toString().equals(amd.getGroupId())) {
|
||||||
|
contentStr = new String(content);
|
||||||
|
if (contentStr != null)
|
||||||
|
openApiParser = OASParserUtil.getOASParser(contentStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apiDef != null && openApiParser != null) {
|
||||||
|
ApiDefinition45 apiDef45 = ApiDefinitionMapper.map(apiDef, openApiParser, contentStr);
|
||||||
content = mapperYaml.writeValueAsBytes(apiDef45);
|
content = mapperYaml.writeValueAsBytes(apiDef45);
|
||||||
FileOutputStream fos = new FileOutputStream(r.getName());
|
FileOutputStream fos = new FileOutputStream("api.yaml");
|
||||||
fos.write(content);
|
fos.write(content);
|
||||||
fos.flush();
|
fos.flush();
|
||||||
fos.close();
|
fos.close();
|
||||||
|
|||||||
@ -5,12 +5,16 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import org.wso2.carbon.apimgt.api.APIDefinition;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import org.wso2.carbon.apimgt.api.model.Scope;
|
||||||
|
import org.wso2.carbon.apimgt.api.model.URITemplate;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
|
||||||
|
import cz.trask.migration.AbstractProcess;
|
||||||
import cz.trask.migration.model.ApiDefinition32;
|
import cz.trask.migration.model.ApiDefinition32;
|
||||||
import cz.trask.migration.model.ApiDefinition45;
|
import cz.trask.migration.model.ApiDefinition45;
|
||||||
import cz.trask.migration.model.ApiDefinition45.ApiPolicies;
|
import cz.trask.migration.model.ApiDefinition45.ApiPolicies;
|
||||||
@ -18,9 +22,8 @@ import cz.trask.migration.util.CredentialsDecoder;
|
|||||||
|
|
||||||
public class ApiDefinitionMapper {
|
public class ApiDefinitionMapper {
|
||||||
|
|
||||||
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
public static ApiDefinition45 map(ApiDefinition32 oldApi, APIDefinition openApiParser, String swagger)
|
||||||
|
throws Exception {
|
||||||
public static ApiDefinition45 map(ApiDefinition32 oldApi) {
|
|
||||||
if (oldApi == null)
|
if (oldApi == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@ -30,13 +33,19 @@ public class ApiDefinitionMapper {
|
|||||||
|
|
||||||
ApiDefinition45.DataSection data = new ApiDefinition45.DataSection();
|
ApiDefinition45.DataSection data = new ApiDefinition45.DataSection();
|
||||||
|
|
||||||
|
Map<String, Object> swaggerData = AbstractProcess.mapperYaml.readValue(swagger, Map.class);
|
||||||
|
|
||||||
// ---------- základní metadata ----------
|
// ---------- základní metadata ----------
|
||||||
data.setId(oldApi.getUuid());
|
data.setId(oldApi.getUuid());
|
||||||
data.setName(oldApi.getId() != null ? oldApi.getId().getApiName() : null);
|
data.setName(oldApi.getId() != null ? oldApi.getId().getApiName() : null);
|
||||||
// data.setDescription(oldApi.getDescription());
|
data.setDescription(swaggerData.get("info") != null
|
||||||
|
? ((Map<String, Object>) swaggerData.get("info")).get("description") != null
|
||||||
|
? ((Map<String, Object>) swaggerData.get("info")).get("description").toString()
|
||||||
|
: ""
|
||||||
|
: "");
|
||||||
data.setVersion(oldApi.getId() != null ? oldApi.getId().getVersion() : null);
|
data.setVersion(oldApi.getId() != null ? oldApi.getId().getVersion() : null);
|
||||||
data.setProvider(oldApi.getId() != null ? oldApi.getId().getProviderName() : null);
|
data.setProvider(oldApi.getId() != null ? oldApi.getId().getProviderName() : null);
|
||||||
data.setContext(oldApi.getContext());
|
data.setContext(swaggerData.get("basePath") != null ? swaggerData.get("basePath").toString() : "");
|
||||||
data.setLifeCycleStatus(oldApi.getStatus());
|
data.setLifeCycleStatus(oldApi.getStatus());
|
||||||
data.setDefaultVersion(oldApi.isDefaultVersion());
|
data.setDefaultVersion(oldApi.isDefaultVersion());
|
||||||
data.setRevision(false);
|
data.setRevision(false);
|
||||||
@ -74,6 +83,15 @@ public class ApiDefinitionMapper {
|
|||||||
data.setAsyncTransportProtocols(Collections.emptyList());
|
data.setAsyncTransportProtocols(Collections.emptyList());
|
||||||
data.setCategories(Collections.emptyList());
|
data.setCategories(Collections.emptyList());
|
||||||
|
|
||||||
|
data.setSubtypeConfiguration(new ApiDefinition45.SubtypeConfiguration());
|
||||||
|
data.getSubtypeConfiguration().setSubtype("DEFAULT");
|
||||||
|
data.setScopes(new ArrayList<>());
|
||||||
|
|
||||||
|
data.setWebsubSubscriptionConfiguration(new ApiDefinition45.WebsubSubscriptionConfiguration());
|
||||||
|
data.getWebsubSubscriptionConfiguration().setEnable(false);
|
||||||
|
data.getWebsubSubscriptionConfiguration().setSecret("");
|
||||||
|
data.getWebsubSubscriptionConfiguration().setSigningAlgorithm("SHA1");
|
||||||
|
data.getWebsubSubscriptionConfiguration().setSignatureHeader("x-hub-signature");
|
||||||
|
|
||||||
// ---------- cache ----------
|
// ---------- cache ----------
|
||||||
data.setResponseCachingEnabled(
|
data.setResponseCachingEnabled(
|
||||||
@ -116,7 +134,8 @@ public class ApiDefinitionMapper {
|
|||||||
data.setSubscriptionAvailableTenants(Collections.emptyList());
|
data.setSubscriptionAvailableTenants(Collections.emptyList());
|
||||||
|
|
||||||
// ---------- operations ----------
|
// ---------- operations ----------
|
||||||
data.setOperations(mapOperations(oldApi));
|
Set<URITemplate> uriTemplates = openApiParser.getURITemplates(swagger);
|
||||||
|
data.setOperations(mapOperations(uriTemplates));
|
||||||
|
|
||||||
// ---------- additional metadata ----------
|
// ---------- additional metadata ----------
|
||||||
data.setCreatedTime(oldApi.getCreatedTime());
|
data.setCreatedTime(oldApi.getCreatedTime());
|
||||||
@ -132,34 +151,34 @@ public class ApiDefinitionMapper {
|
|||||||
private static ApiPolicies mapApiPolicies(ApiDefinition32 oldApi) {
|
private static ApiPolicies mapApiPolicies(ApiDefinition32 oldApi) {
|
||||||
ApiDefinition45.ApiPolicies apiPolicies = new ApiDefinition45.ApiPolicies();
|
ApiDefinition45.ApiPolicies apiPolicies = new ApiDefinition45.ApiPolicies();
|
||||||
// ---------- request policies ----------
|
// ---------- request policies ----------
|
||||||
if (oldApi.getInSequence()!=null && !oldApi.getInSequence().isEmpty()) {
|
if (oldApi.getInSequence() != null && !oldApi.getInSequence().isEmpty()) {
|
||||||
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
||||||
requestPolicy.setPolicyName(oldApi.getInSequence());
|
requestPolicy.setPolicyName(oldApi.getInSequence());
|
||||||
requestPolicy.setPolicyType("common");
|
requestPolicy.setPolicyType("common");
|
||||||
requestPolicy.setPolicyVersion("v1");
|
requestPolicy.setPolicyVersion("v1");
|
||||||
requestPolicy.setPolicyId(UUID.randomUUID().toString());
|
requestPolicy.setPolicyId("");
|
||||||
requestPolicy.setParameters(Collections.emptyMap());
|
requestPolicy.setParameters(Collections.emptyMap());
|
||||||
apiPolicies.setRequest(List.of(requestPolicy));
|
apiPolicies.setRequest(List.of(requestPolicy));
|
||||||
} else
|
} else
|
||||||
apiPolicies.setRequest(Collections.emptyList());
|
apiPolicies.setRequest(Collections.emptyList());
|
||||||
// ---------- response policies ----------
|
// ---------- response policies ----------
|
||||||
if (oldApi.getOutSequence()!=null && !oldApi.getOutSequence().isEmpty()) {
|
if (oldApi.getOutSequence() != null && !oldApi.getOutSequence().isEmpty()) {
|
||||||
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
||||||
requestPolicy.setPolicyName(oldApi.getOutSequence());
|
requestPolicy.setPolicyName(oldApi.getOutSequence());
|
||||||
requestPolicy.setPolicyType("common");
|
requestPolicy.setPolicyType("common");
|
||||||
requestPolicy.setPolicyVersion("v1");
|
requestPolicy.setPolicyVersion("v1");
|
||||||
requestPolicy.setPolicyId(UUID.randomUUID().toString());
|
requestPolicy.setPolicyId("");
|
||||||
requestPolicy.setParameters(Collections.emptyMap());
|
requestPolicy.setParameters(Collections.emptyMap());
|
||||||
apiPolicies.setResponse(List.of(requestPolicy));
|
apiPolicies.setResponse(List.of(requestPolicy));
|
||||||
} else
|
} else
|
||||||
apiPolicies.setResponse(Collections.emptyList());
|
apiPolicies.setResponse(Collections.emptyList());
|
||||||
// ---------- fault policies ----------
|
// ---------- fault policies ----------
|
||||||
if (oldApi.getFaultSequence()!=null && !oldApi.getFaultSequence().isEmpty()) {
|
if (oldApi.getFaultSequence() != null && !oldApi.getFaultSequence().isEmpty()) {
|
||||||
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
|
||||||
requestPolicy.setPolicyName(oldApi.getFaultSequence());
|
requestPolicy.setPolicyName(oldApi.getFaultSequence());
|
||||||
requestPolicy.setPolicyType("common");
|
requestPolicy.setPolicyType("common");
|
||||||
requestPolicy.setPolicyVersion("v1");
|
requestPolicy.setPolicyVersion("v1");
|
||||||
requestPolicy.setPolicyId(UUID.randomUUID().toString());
|
requestPolicy.setPolicyId("");
|
||||||
requestPolicy.setParameters(Collections.emptyMap());
|
requestPolicy.setParameters(Collections.emptyMap());
|
||||||
apiPolicies.setFault(List.of(requestPolicy));
|
apiPolicies.setFault(List.of(requestPolicy));
|
||||||
} else
|
} else
|
||||||
@ -230,7 +249,7 @@ public class ApiDefinitionMapper {
|
|||||||
// ---------- parse customParameters JSON string ----------
|
// ---------- parse customParameters JSON string ----------
|
||||||
if (oldSec.getCustomParameters() != null && !oldSec.getCustomParameters().isEmpty()) {
|
if (oldSec.getCustomParameters() != null && !oldSec.getCustomParameters().isEmpty()) {
|
||||||
try {
|
try {
|
||||||
Map<String, Object> map = OBJECT_MAPPER.readValue(oldSec.getCustomParameters(), new TypeReference<>() {
|
Map<String, Object> map = AbstractProcess.mapperYaml.readValue(oldSec.getCustomParameters(), new TypeReference<>() {
|
||||||
});
|
});
|
||||||
newSec.setCustomParameters(map);
|
newSec.setCustomParameters(map);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -246,28 +265,37 @@ public class ApiDefinitionMapper {
|
|||||||
return newSec;
|
return newSec;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<ApiDefinition45.Operation> mapOperations(ApiDefinition32 oldApi) {
|
private static List<ApiDefinition45.Operation> mapOperations(Set<URITemplate> uriTemplates) {
|
||||||
if (oldApi.getUriTemplates() == null || oldApi.getUriTemplates().isEmpty())
|
if (uriTemplates == null || uriTemplates.isEmpty())
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|
||||||
return oldApi.getUriTemplates().stream().map(templateObj -> {
|
List<ApiDefinition45.Operation> operations = new ArrayList<>();
|
||||||
ApiDefinition45.Operation op = new ApiDefinition45.Operation();
|
|
||||||
if (templateObj instanceof Map) {
|
|
||||||
Map<String, Object> template = (Map<String, Object>) templateObj;
|
|
||||||
op.setTarget((String) template.get("uri"));
|
|
||||||
op.setVerb((String) template.get("verb"));
|
|
||||||
op.setThrottlingPolicy((String) template.get("throttlingPolicy"));
|
|
||||||
op.setAuthType((String) template.get("authType"));
|
|
||||||
op.setScopes(Collections.emptyList());
|
|
||||||
op.setUsedProductIds(Collections.emptyList());
|
|
||||||
|
|
||||||
ApiDefinition45.OperationPolicies opPolicies = new ApiDefinition45.OperationPolicies();
|
for (URITemplate uriTemplate : uriTemplates) {
|
||||||
opPolicies.setRequest(Collections.emptyList());
|
|
||||||
opPolicies.setResponse(Collections.emptyList());
|
ApiDefinition45.Operation op = new ApiDefinition45.Operation();
|
||||||
opPolicies.setFault(Collections.emptyList());
|
op.setId("");
|
||||||
op.setOperationPolicies(opPolicies);
|
op.setAuthType(uriTemplate.getAuthType());
|
||||||
|
op.setThrottlingPolicy(uriTemplate.getThrottlingTier());
|
||||||
|
op.setVerb(uriTemplate.getHTTPVerb());
|
||||||
|
op.setTarget(uriTemplate.getUriTemplate());
|
||||||
|
op.setScopes(new ArrayList<>());
|
||||||
|
for (Scope scope : uriTemplate.getScopes()) {
|
||||||
|
if (scope != null && scope.getKey() != null && !scope.getKey().isEmpty()) {
|
||||||
|
op.getScopes().add(scope.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return op;
|
|
||||||
}).collect(Collectors.toList());
|
op.setUsedProductIds(new ArrayList<>());
|
||||||
|
|
||||||
|
ApiDefinition45.OperationPolicies opPolicies = new ApiDefinition45.OperationPolicies();
|
||||||
|
opPolicies.setRequest(Collections.emptyList());
|
||||||
|
opPolicies.setResponse(Collections.emptyList());
|
||||||
|
opPolicies.setFault(Collections.emptyList());
|
||||||
|
op.setOperationPolicies(opPolicies);
|
||||||
|
|
||||||
|
operations.add(op);
|
||||||
|
}
|
||||||
|
return operations;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -181,8 +181,8 @@ public class ApiDefinition45 {
|
|||||||
private String verb;
|
private String verb;
|
||||||
private String authType;
|
private String authType;
|
||||||
private String throttlingPolicy;
|
private String throttlingPolicy;
|
||||||
private List<Object> scopes;
|
private List<String> scopes;
|
||||||
private List<Object> usedProductIds;
|
private List<String> usedProductIds;
|
||||||
private OperationPolicies operationPolicies;
|
private OperationPolicies operationPolicies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user