diff --git a/pom.xml b/pom.xml
index b57745c..0a84bd0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -44,6 +44,11 @@
1.18.38
provided
+
+ org.wso2.carbon.apimgt
+ org.wso2.carbon.apimgt.impl
+ 9.31.86
+
diff --git a/src/main/java/cz/trask/migration/AbstractProcess.java b/src/main/java/cz/trask/migration/AbstractProcess.java
index 917f5f1..fecbac4 100644
--- a/src/main/java/cz/trask/migration/AbstractProcess.java
+++ b/src/main/java/cz/trask/migration/AbstractProcess.java
@@ -35,9 +35,8 @@ public abstract class AbstractProcess {
protected static final String PARAM_SOURCE_APIM = "source_apim";
protected static final String VERSION_32 = "v32";
- protected static ObjectMapper mapper;
-
- protected static ObjectMapper mapperYaml;
+ public static ObjectMapper mapper;
+ public static ObjectMapper mapperYaml;
protected ConfigManager config = ConfigManager.getInstance();
@@ -47,9 +46,10 @@ public abstract class AbstractProcess {
YAMLFactory yamlFactory = new YAMLFactory();
yamlFactory.configure(YAMLGenerator.Feature.WRITE_DOC_START_MARKER, false);
yamlFactory.configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true);
+ yamlFactory.configure(YAMLGenerator.Feature.SPLIT_LINES, false);
mapperYaml = new ObjectMapper(yamlFactory);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
+
setTrustStoreCredentials();
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
diff --git a/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java b/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java
index 3e22c36..6af4b13 100644
--- a/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java
+++ b/src/main/java/cz/trask/migration/impl/v45/ExportToWso2FromV32.java
@@ -2,10 +2,10 @@ package cz.trask.migration.impl.v45;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
-import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
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.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.mapper.ApiDefinitionMapper;
@@ -161,13 +164,17 @@ public class ExportToWso2FromV32 extends AbstractProcess {
}
public static byte[] prepareApiZipFile32to45(RegistryClient client, SearchedVersion ver,
- List ref) throws IOException {
+ List ref) throws Exception {
String baseDir = ver.getName() + "-" + ver.getVersion() + "/";
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos)) {
+ ApiDefinition32 apiDef = null;
+ APIDefinition openApiParser = null;
+ String contentStr = null;
+
for (ArtifactReference r : ref) {
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();
if (FileType.APIDEF.toString().equals(amd.getGroupId())) {
- ApiDefinition32 apiDef = mapperYaml.readValue(content, ApiDefinition32.class);
- ApiDefinition45 apiDef45 = ApiDefinitionMapper.map(apiDef);
+ apiDef = mapperYaml.readValue(content, ApiDefinition32.class);
+ } 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);
- FileOutputStream fos = new FileOutputStream(r.getName());
+ FileOutputStream fos = new FileOutputStream("api.yaml");
fos.write(content);
fos.flush();
fos.close();
diff --git a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java
index e2aa681..5115065 100644
--- a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java
+++ b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java
@@ -5,12 +5,16 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
+import java.util.Set;
import java.util.stream.Collectors;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import org.wso2.carbon.apimgt.api.APIDefinition;
+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.ApiDefinition45;
import cz.trask.migration.model.ApiDefinition45.ApiPolicies;
@@ -18,9 +22,8 @@ import cz.trask.migration.util.CredentialsDecoder;
public class ApiDefinitionMapper {
- private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
- public static ApiDefinition45 map(ApiDefinition32 oldApi) {
+ public static ApiDefinition45 map(ApiDefinition32 oldApi, APIDefinition openApiParser, String swagger)
+ throws Exception {
if (oldApi == null)
return null;
@@ -30,13 +33,19 @@ public class ApiDefinitionMapper {
ApiDefinition45.DataSection data = new ApiDefinition45.DataSection();
+ Map swaggerData = AbstractProcess.mapperYaml.readValue(swagger, Map.class);
+
// ---------- základní metadata ----------
data.setId(oldApi.getUuid());
data.setName(oldApi.getId() != null ? oldApi.getId().getApiName() : null);
- // data.setDescription(oldApi.getDescription());
+ data.setDescription(swaggerData.get("info") != null
+ ? ((Map) swaggerData.get("info")).get("description") != null
+ ? ((Map) swaggerData.get("info")).get("description").toString()
+ : ""
+ : "");
data.setVersion(oldApi.getId() != null ? oldApi.getId().getVersion() : 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.setDefaultVersion(oldApi.isDefaultVersion());
data.setRevision(false);
@@ -68,13 +77,22 @@ public class ApiDefinitionMapper {
} else {
data.setSecurityScheme(Collections.emptyList());
}
-
+
data.setApiKeyHeader("ApiKey");
data.setOrganizationId("carbon.super");
data.setAsyncTransportProtocols(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 ----------
data.setResponseCachingEnabled(
oldApi.getResponseCache() != null && !"disabled".equalsIgnoreCase(oldApi.getResponseCache()));
@@ -99,7 +117,7 @@ public class ApiDefinitionMapper {
ai.setApiOwner(oldApi.getId() != null ? oldApi.getId().getProviderName() : null);
ai.setVendor("WSO2");
data.setAdvertiseInfo(ai);
-
+
data.setVisibleOrganizations(Arrays.asList("none"));
// ---------- gateway ----------
@@ -116,7 +134,8 @@ public class ApiDefinitionMapper {
data.setSubscriptionAvailableTenants(Collections.emptyList());
// ---------- operations ----------
- data.setOperations(mapOperations(oldApi));
+ Set uriTemplates = openApiParser.getURITemplates(swagger);
+ data.setOperations(mapOperations(uriTemplates));
// ---------- additional metadata ----------
data.setCreatedTime(oldApi.getCreatedTime());
@@ -132,39 +151,39 @@ public class ApiDefinitionMapper {
private static ApiPolicies mapApiPolicies(ApiDefinition32 oldApi) {
ApiDefinition45.ApiPolicies apiPolicies = new ApiDefinition45.ApiPolicies();
// ---------- request policies ----------
- if (oldApi.getInSequence()!=null && !oldApi.getInSequence().isEmpty()) {
+ if (oldApi.getInSequence() != null && !oldApi.getInSequence().isEmpty()) {
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
requestPolicy.setPolicyName(oldApi.getInSequence());
requestPolicy.setPolicyType("common");
requestPolicy.setPolicyVersion("v1");
- requestPolicy.setPolicyId(UUID.randomUUID().toString());
+ requestPolicy.setPolicyId("");
requestPolicy.setParameters(Collections.emptyMap());
apiPolicies.setRequest(List.of(requestPolicy));
} else
apiPolicies.setRequest(Collections.emptyList());
// ---------- response policies ----------
- if (oldApi.getOutSequence()!=null && !oldApi.getOutSequence().isEmpty()) {
+ if (oldApi.getOutSequence() != null && !oldApi.getOutSequence().isEmpty()) {
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
requestPolicy.setPolicyName(oldApi.getOutSequence());
requestPolicy.setPolicyType("common");
requestPolicy.setPolicyVersion("v1");
- requestPolicy.setPolicyId(UUID.randomUUID().toString());
+ requestPolicy.setPolicyId("");
requestPolicy.setParameters(Collections.emptyMap());
apiPolicies.setResponse(List.of(requestPolicy));
} else
apiPolicies.setResponse(Collections.emptyList());
// ---------- fault policies ----------
- if (oldApi.getFaultSequence()!=null && !oldApi.getFaultSequence().isEmpty()) {
+ if (oldApi.getFaultSequence() != null && !oldApi.getFaultSequence().isEmpty()) {
ApiDefinition45.Policy requestPolicy = new ApiDefinition45.Policy();
requestPolicy.setPolicyName(oldApi.getFaultSequence());
requestPolicy.setPolicyType("common");
requestPolicy.setPolicyVersion("v1");
- requestPolicy.setPolicyId(UUID.randomUUID().toString());
+ requestPolicy.setPolicyId("");
requestPolicy.setParameters(Collections.emptyMap());
apiPolicies.setFault(List.of(requestPolicy));
} else
apiPolicies.setFault(Collections.emptyList());
-
+
return apiPolicies;
}
@@ -230,7 +249,7 @@ public class ApiDefinitionMapper {
// ---------- parse customParameters JSON string ----------
if (oldSec.getCustomParameters() != null && !oldSec.getCustomParameters().isEmpty()) {
try {
- Map map = OBJECT_MAPPER.readValue(oldSec.getCustomParameters(), new TypeReference<>() {
+ Map map = AbstractProcess.mapperYaml.readValue(oldSec.getCustomParameters(), new TypeReference<>() {
});
newSec.setCustomParameters(map);
} catch (Exception e) {
@@ -246,28 +265,37 @@ public class ApiDefinitionMapper {
return newSec;
}
- private static List mapOperations(ApiDefinition32 oldApi) {
- if (oldApi.getUriTemplates() == null || oldApi.getUriTemplates().isEmpty())
+ private static List mapOperations(Set uriTemplates) {
+ if (uriTemplates == null || uriTemplates.isEmpty())
return Collections.emptyList();
- return oldApi.getUriTemplates().stream().map(templateObj -> {
- ApiDefinition45.Operation op = new ApiDefinition45.Operation();
- if (templateObj instanceof Map) {
- Map template = (Map) 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());
+ List operations = new ArrayList<>();
- ApiDefinition45.OperationPolicies opPolicies = new ApiDefinition45.OperationPolicies();
- opPolicies.setRequest(Collections.emptyList());
- opPolicies.setResponse(Collections.emptyList());
- opPolicies.setFault(Collections.emptyList());
- op.setOperationPolicies(opPolicies);
+ for (URITemplate uriTemplate : uriTemplates) {
+
+ ApiDefinition45.Operation op = new ApiDefinition45.Operation();
+ op.setId("");
+ 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;
}
}
diff --git a/src/main/java/cz/trask/migration/model/ApiDefinition45.java b/src/main/java/cz/trask/migration/model/ApiDefinition45.java
index ea2855e..c50d9ef 100644
--- a/src/main/java/cz/trask/migration/model/ApiDefinition45.java
+++ b/src/main/java/cz/trask/migration/model/ApiDefinition45.java
@@ -181,8 +181,8 @@ public class ApiDefinition45 {
private String verb;
private String authType;
private String throttlingPolicy;
- private List