diff --git a/pom.xml b/pom.xml
index 10b7ac9..9606c72 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,11 @@
gson
2.13.1
+
+ org.yaml
+ snakeyaml
+ 2.4
+
diff --git a/src/main/java/cz/trask/apioperator/AbstractProcess.java b/src/main/java/cz/trask/apioperator/AbstractProcess.java
index 3eaa80b..1996e37 100644
--- a/src/main/java/cz/trask/apioperator/AbstractProcess.java
+++ b/src/main/java/cz/trask/apioperator/AbstractProcess.java
@@ -16,6 +16,7 @@ import javax.net.ssl.HttpsURLConnection;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.yaml.snakeyaml.Yaml;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -31,12 +32,16 @@ public abstract class AbstractProcess {
private static Logger log = LogManager.getLogger(AbstractProcess.class);
protected Gson gson;
+
+ protected Yaml yaml;
protected ConfigManager config = ConfigManager.getInstance();
protected AbstractProcess() {
gson = new GsonBuilder().create();
+
+ yaml = new Yaml();
setTrustStoreCredentials();
diff --git a/src/main/java/cz/trask/apioperator/ApiSync.java b/src/main/java/cz/trask/apioperator/ApiSync.java
index 2d52a22..350efd6 100644
--- a/src/main/java/cz/trask/apioperator/ApiSync.java
+++ b/src/main/java/cz/trask/apioperator/ApiSync.java
@@ -24,7 +24,7 @@ public class ApiSync {
if (sp.getCommand().equalsIgnoreCase("import")) {
log.info("Import command selected.");
- Import imp = new Import(sp);
+ Import imp = new Import();
imp.process();
}
}
diff --git a/src/main/java/cz/trask/apioperator/impl/Import.java b/src/main/java/cz/trask/apioperator/impl/Import.java
index 94e9acd..957de05 100644
--- a/src/main/java/cz/trask/apioperator/impl/Import.java
+++ b/src/main/java/cz/trask/apioperator/impl/Import.java
@@ -18,15 +18,14 @@ import org.apache.logging.log4j.Logger;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import cz.trask.apioperator.AbstractProcess;
import cz.trask.apioperator.model.APIInfo;
import cz.trask.apioperator.model.APIList;
+import cz.trask.apioperator.model.FileType;
import cz.trask.apioperator.model.HttpResponse;
import cz.trask.apioperator.model.RegisterResponse;
-import cz.trask.apioperator.model.StartParameters;
import cz.trask.apioperator.model.TokenResponse;
import cz.trask.apioperator.model.ZipEntryData;
import cz.trask.apioperator.utils.ZipExtractor;
@@ -40,22 +39,6 @@ import io.apicurio.registry.rest.v2.beans.Rule;
import io.apicurio.registry.rest.v2.beans.VersionSearchResults;
import io.apicurio.registry.types.RuleType;
-/**
- * Import class – reads APIs from WSO2 APIM and publishes them to Apicurio.
- *
- *
- * All major improvements from the original code:
- *
- * - Thread‑safe counter using {@link AtomicInteger}
- * - Parameterized Log4j messages
- * - Safe JSON deserialization with {@code TypeToken}
- * - Try‑with‑resources for all streams
- * - Artifact creation – references first, then parent
- * - Cleaner metadata handling (no trailing spaces)
- * - Specific exception handling and wrapping in a runtime exception
- *
- *
- */
public class Import extends AbstractProcess {
private static final Logger log = LogManager.getLogger(Import.class);
@@ -63,11 +46,9 @@ public class Import extends AbstractProcess {
private final AtomicInteger apiCounter = new AtomicInteger(1);
private final Gson gson = new Gson();
- private final StartParameters sp;
private final RegistryClient client;
- public Import(StartParameters sp) throws Exception {
- this.sp = sp;
+ public Import() throws Exception {
this.client = RegistryClientFactory.create(config.getApicurioApiUrl());
}
@@ -143,8 +124,6 @@ public class Import extends AbstractProcess {
Map httpHeaders = Collections.singletonMap("Authorization",
"Bearer " + tokenResponse.getAccess_token());
- String type = mapApiType(api.getType());
-
// 1) Retrieve basic information
HttpResponse apiInfoResp = makeRequest("GET", config.getSourceDevportalApiUrl() + "/apis/" + api.getId(),
httpHeaders, Collections.emptyMap());
@@ -153,17 +132,23 @@ public class Import extends AbstractProcess {
config.getSourcePublisherApiUrl() + "/subscriptions?apiId=" + api.getId(), httpHeaders,
Collections.emptyMap());
- HttpResponse swaggerResp = makeRequest("GET",
- config.getSourcePublisherApiUrl() + "/apis/" + api.getId() + "/swagger", httpHeaders,
- Collections.emptyMap());
-
// 2) Export the API as a zip
HttpResponse exportedZip = makeRequest("GET",
config.getSourcePublisherApiUrl() + "/apis/export?apiId=" + api.getId(), httpHeaders,
Collections.emptyMap(), true);
List zipEntries = ZipExtractor.extractFilesFromZip(exportedZip.getResponseBytes());
-
+
+ String swagger = null;
+
+ for (ZipEntryData e : zipEntries) {
+ if (e.getType().toString().equals(FileType.OPENAPI.toString())) {
+ log.debug("Found main API definition file: {}", e.getName());
+ swagger = new String(e.getContent());
+ break;
+ }
+ }
+
// 3) Deserialize JSON responses
TypeToken