From c066535843bba83f7f91e799ac65292b1a9a2348 Mon Sep 17 00:00:00 2001 From: rdavidek Date: Mon, 9 Feb 2026 16:19:57 +0100 Subject: [PATCH] API versioning fixed --- .gitignore | 3 +- client-truststore.jks | Bin 4945 -> 9047 bytes pom.xml | 1 - .../cz/trask/migration/AbstractProcess.java | 27 ++++++++++++++++-- .../migration/impl/v32/Wso2v32ToApicurio.java | 14 +++++++++ src/main/resources/apicurio-migrator.yaml | 20 ++++++------- 6 files changed, 50 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 7f5329a..da6a13b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ bin .vscode /api.yaml *.zip -apis \ No newline at end of file +apis +tmp \ No newline at end of file diff --git a/client-truststore.jks b/client-truststore.jks index a557f3b88e2fd1117776db67d4fee6d3fb2bcc53..f2e5e42570326a1de6a01ff3402ca26af054e525 100644 GIT binary patch delta 4120 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 delta 47 zcmccac2SMz-`jt085kItfS7e7&lK*>%cSSBi>#gfGUBN7&7T)`%Cv~LO?uFwQqBhe D*}W7} diff --git a/pom.xml b/pom.xml index 68c169e..acba44f 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,6 @@ org.projectlombok lombok 1.18.38 - provided io.swagger diff --git a/src/main/java/cz/trask/migration/AbstractProcess.java b/src/main/java/cz/trask/migration/AbstractProcess.java index 5c46547..6719d38 100644 --- a/src/main/java/cz/trask/migration/AbstractProcess.java +++ b/src/main/java/cz/trask/migration/AbstractProcess.java @@ -5,6 +5,7 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -87,8 +88,6 @@ public abstract class AbstractProcess { config = ConfigManager.getInstance().getConfig(); - this.client = RegistryClientFactory.create(config.getApicurio().getApiUrl()); - setTrustStoreCredentials(); javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() { @@ -96,6 +95,21 @@ public abstract class AbstractProcess { return true; } }); + + Map clientConfigs = new HashMap<>(); + try { + SSLContext sslContext = createSSLContext( + config.getTrustStore().getPath(), + config.getTrustStore().getPassword() + ); + clientConfigs.put("io.apicurio.rest.client.jdk.sslContext", sslContext); + } catch (Exception e) { + log.error("Failed to initialize SSL context for Apicurio client", e); + } + + this.client = RegistryClientFactory.create(config.getApicurio().getApiUrl(), clientConfigs); + client.listConfigProperties(); + } protected void setTrustStoreCredentials() { @@ -388,7 +402,8 @@ public abstract class AbstractProcess { APIList listOfApis = null; try { - String url = publisherurl.concat(String.format("/apis?limit=9999&offset=0")); + //String url = publisherurl.concat(String.format("/apis?limit=10&offset=0&query=name:%s", "PTSPaymentHubCZSIT*")); + String url = publisherurl.concat("/apis?limit=9999&offset=0"); log.debug("Getting APIs with token: '" + tokenResponse.getAccess_token() + "' URL: " + url); @@ -558,6 +573,12 @@ public abstract class AbstractProcess { log.debug("Creating artifact reference for entry: {} with artifactId: {}", entry.getName(), artifactId); + File tmpFile = new File("tmp/api/", entry.getName()); + FileOutputStream fos = new FileOutputStream(tmpFile); + fos.write(entry.getContent()); + fos.flush(); + fos.close(); + try (ByteArrayInputStream is = new ByteArrayInputStream(entry.getContent())) { ArtifactMetaData meta = client.createArtifactWithVersion(entry.getType().toString(), artifactId, api.getVersion(), is); Map props = new LinkedHashMap<>(); diff --git a/src/main/java/cz/trask/migration/impl/v32/Wso2v32ToApicurio.java b/src/main/java/cz/trask/migration/impl/v32/Wso2v32ToApicurio.java index db166a4..e383dfe 100644 --- a/src/main/java/cz/trask/migration/impl/v32/Wso2v32ToApicurio.java +++ b/src/main/java/cz/trask/migration/impl/v32/Wso2v32ToApicurio.java @@ -1,6 +1,8 @@ package cz.trask.migration.impl.v32; import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -108,6 +110,15 @@ public class Wso2v32ToApicurio extends AbstractProcess { config.getSource().getPublisherApiUrl() + "/apis/export?apiId=" + api.getId(), httpHeaders, Collections.emptyMap(), true); + if (config.isStoreMigratedArtifacts()) { + File tmpFile = new File("tmp/api/", api.getName() + "_" + api.getVersion() + ".zip"); + log.info(" - Storing migrated Api file: {}", tmpFile.getAbsolutePath()); + FileOutputStream fos = new FileOutputStream(tmpFile); + fos.write(exportedZip.getResponseBytes()); + fos.flush(); + fos.close(); + } + List zipEntries = ZipUtils.extractFilesFromZip(exportedZip.getResponseBytes()); String swagger = null; @@ -148,6 +159,9 @@ public class Wso2v32ToApicurio extends AbstractProcess { Map swaggerMap = mapperYaml.readValue(swagger, Map.class); ObjectNode swaggerObj = mapperYaml.valueToTree(swaggerMap); updateSwagger(swaggerObj, apiMap, fullDesc); + + api.setName((String)apiMap.get("name")); + api.setContext((String)apiMap.get("context")); // 7) Prepare artifact creation/update String group = config.getApicurio().getDefaultApiGroup(); diff --git a/src/main/resources/apicurio-migrator.yaml b/src/main/resources/apicurio-migrator.yaml index 4a21cc7..c253a2d 100644 --- a/src/main/resources/apicurio-migrator.yaml +++ b/src/main/resources/apicurio-migrator.yaml @@ -1,10 +1,10 @@ source: - registration_api_url: https://localhost:9444/client-registration/v0.17/register - publisher_api_url: https://localhost:9444/api/am/publisher - admin_api_url: https://localhost:9444/api/am/admin/v1 - devportal_api_url: https://localhost:9444/api/am/store - publisher_token_url: https://localhost:9444/oauth2/token - wso2_user: YWRtaW46YWRtaW4= + registration_api_url: https://developerstest.jtfg.com/client-registration/v0.17/register + publisher_api_url: https://developerstest.jtfg.com/api/am/publisher + admin_api_url: https://developerstest.jtfg.com/api/am/admin/v1 + devportal_api_url: https://developerstest.jtfg.com/api/am/store + publisher_token_url: https://developerstest.jtfg.com/oauth2/token + wso2_user: YWRtaW46UkllSTVBeGN4LXZRQVZsSA== wso2_apis_dir: apis target: @@ -20,14 +20,14 @@ truststore: password: wso2carbon patterns: - publisher_url_pattern: https://api-developers.dev.koop.appl.services/publisher/apis/{API_ID}/overview - devportal_url_pattern: https://api-developers.dev.koop.appl.services/devportal/apis/{API_ID}/overview + publisher_url_pattern: https://developers/publisher/apis/{API_ID}/overview + devportal_url_pattern: https://developers/devportal/apis/{API_ID}/overview apicurio: - api_url: http://apicurio:8095/apis/registry/v2 + api_url: https://apim-apicurio-app-apim-wso2.apps.oshift-akc.jtfg.com/apis/registry/v2 default_api_group: api overwrite_existing_application: true -max_threads: 1 +max_threads: 8 store_migrated_artifacts: true \ No newline at end of file