From 3a53955a99a788f719f32c43ac7c5a768df842c8 Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Thu, 16 Oct 2025 17:05:51 +0200 Subject: [PATCH] api definition for 3.2 fixed --- client-truststore.jks | Bin 2985 -> 2985 bytes pom.xml | 6 + .../cz/trask/migration/AbstractProcess.java | 36 +--- .../migration/impl/v32/ImportToApicurio.java | 4 - .../migration/mapper/ApiDefinitionMapper.java | 5 + .../migration/model/ApiDefinition32.java | 170 +++++++++++++++ .../migration/model/ApiDefinition45.java | 200 ++++++++++++++++++ .../migration/model/v32/ApiDefinition.java | 168 --------------- 8 files changed, 388 insertions(+), 201 deletions(-) create mode 100644 src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java create mode 100644 src/main/java/cz/trask/migration/model/ApiDefinition32.java create mode 100644 src/main/java/cz/trask/migration/model/ApiDefinition45.java delete mode 100644 src/main/java/cz/trask/migration/model/v32/ApiDefinition.java diff --git a/client-truststore.jks b/client-truststore.jks index cd49521e0b41ccde32fc17919ccba67f16735ffa..df9d745e8e139c8f82d63e83a1eb0393a6ce67ef 100644 GIT binary patch delta 40 wcmZ1}zEXUGGRxb-qmh&EvP*4r4B-|@J|1NfI5}OGzxifXH4krwS=*sV07EJdasU7T delta 40 ycmV+@0N4Mi7pWJJBLtbP=qi)l2O6jackson-dataformat-yaml 2.19.2 + + org.projectlombok + lombok + 1.18.38 + provided + diff --git a/src/main/java/cz/trask/migration/AbstractProcess.java b/src/main/java/cz/trask/migration/AbstractProcess.java index 33af95f..5b460b8 100644 --- a/src/main/java/cz/trask/migration/AbstractProcess.java +++ b/src/main/java/cz/trask/migration/AbstractProcess.java @@ -2,21 +2,17 @@ package cz.trask.migration; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; -import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.Charset; -import java.security.KeyStore; import java.util.Base64; import java.util.HashMap; import java.util.Map; import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManagerFactory; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -38,14 +34,12 @@ public abstract class AbstractProcess { protected static final String PARAM_SOURCE_APIM = "source_apim"; protected static final String VERSION_32 = "v32"; - protected ObjectMapper mapper; + protected static ObjectMapper mapper; - protected ObjectMapper mapperYaml; + protected static ObjectMapper mapperYaml; protected ConfigManager config = ConfigManager.getInstance(); - private SSLContext sslCtx; - protected AbstractProcess() { mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); @@ -63,23 +57,8 @@ public abstract class AbstractProcess { protected void setTrustStoreCredentials() { log.info("Setting truststore: " + config.getTruststorePath()); - KeyStore trustStore; - try { - trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - - try (FileInputStream tsFis = new FileInputStream(config.getTruststorePath())) { - trustStore.load(tsFis, config.getTruststorePassword().toCharArray()); - } - - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - tmf.init(trustStore); - - sslCtx = SSLContext.getInstance("TLS"); - sslCtx.init(null, tmf.getTrustManagers(), null); - - } catch (Exception e) { - log.error("Cannot set truststore.", e); - } + System.setProperty("javax.net.ssl.trustStore", config.getTruststorePath()); + System.setProperty("javax.net.ssl.trustStorePassword", config.getTruststorePassword()); } /** @@ -252,7 +231,6 @@ public abstract class AbstractProcess { URL url = new URL(urlStr); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setSSLSocketFactory(sslCtx.getSocketFactory()); con.setRequestMethod("POST"); con.setDoInput(true); con.setDoOutput(true); @@ -333,8 +311,8 @@ public abstract class AbstractProcess { * @param api - zip file to upload * @throws Exception */ - protected HttpResponse makeFileRequest(String method, String urlStr, Map httpHeaders, - byte[] buff, String attachmentFileName) throws Exception { + protected HttpResponse makeFileRequest(String method, String urlStr, Map httpHeaders, byte[] buff, + String attachmentFileName) throws Exception { if (buff == null) { log.error("Cannot send NULL payload to rest service."); @@ -348,7 +326,6 @@ public abstract class AbstractProcess { URL url = new URL(urlStr); HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); - con.setSSLSocketFactory(sslCtx.getSocketFactory()); con.setUseCaches(false); con.setDoOutput(true); @@ -399,4 +376,5 @@ public abstract class AbstractProcess { return resp; } + } diff --git a/src/main/java/cz/trask/migration/impl/v32/ImportToApicurio.java b/src/main/java/cz/trask/migration/impl/v32/ImportToApicurio.java index 4c9e835..a981e5f 100644 --- a/src/main/java/cz/trask/migration/impl/v32/ImportToApicurio.java +++ b/src/main/java/cz/trask/migration/impl/v32/ImportToApicurio.java @@ -317,10 +317,6 @@ public class ImportToApicurio extends AbstractProcess { for (ZipEntryData entry : zipEntries) { String artifactId = api.getName() + "/" + api.getVersion() + "/" + entry.getName(); - // ApiDefinition apiDef = mapper.readValue(entry.getContent(), - // ApiDefinition.class); - - // Create the artifact (versioned) try (ByteArrayInputStream is = new ByteArrayInputStream(entry.getContent())) { ArtifactMetaData meta = client.createArtifactWithVersion(entry.getType().toString(), artifactId, api.getVersion(), is); diff --git a/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java new file mode 100644 index 0000000..99391ca --- /dev/null +++ b/src/main/java/cz/trask/migration/mapper/ApiDefinitionMapper.java @@ -0,0 +1,5 @@ +package cz.trask.migration.mapper; + +public class ApiDefinitionMapper { + +} diff --git a/src/main/java/cz/trask/migration/model/ApiDefinition32.java b/src/main/java/cz/trask/migration/model/ApiDefinition32.java new file mode 100644 index 0000000..ccce94f --- /dev/null +++ b/src/main/java/cz/trask/migration/model/ApiDefinition32.java @@ -0,0 +1,170 @@ +package cz.trask.migration.model; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ApiDefinition32 { + + public static class EndpointConfigDeserializer extends JsonDeserializer { + @Override + public EndpointConfig deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String json = p.getValueAsString(); + ObjectMapper mapper = new ObjectMapper(); + return mapper.readValue(json, EndpointConfig.class); + } + } + + private IdSection id; + private String uuid; + private String type; + private String context; + private String contextTemplate; + private List tags; + private List documents; + private String lastUpdated; + private List availableTiers; + private List availableSubscriptionLevelPolicies; + private List uriTemplates; + private boolean apiHeaderChanged; + private boolean apiResourcePatternsChanged; + private String status; + private String visibility; + private List gatewayLabels; + private boolean endpointSecured; + private boolean endpointAuthDigest; + private String transports; + private String inSequence; + private boolean advertiseOnly; + private String subscriptionAvailability; + private CorsConfiguration corsConfiguration; + @JsonDeserialize(using = EndpointConfigDeserializer.class) + private EndpointConfig endpointConfig; + private String responseCache; + private int cacheTimeout; + private String implementation; + private String authorizationHeader; + private List scopes; + private boolean isDefaultVersion; + private boolean isPublishedDefaultVersion; + private List keyManagers; + private List environments; + private String createdTime; + private Map additionalProperties; + private Map monetizationProperties; + private boolean isMonetizationEnabled; + private List environmentList; + private String apiSecurity; + private List endpoints; + private boolean enableSchemaValidation; + private List apiCategories; + private boolean enableStore; + private String accessControl; + private double rating; + private boolean isLatest; + + // -------------------- inner classes -------------------- + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class IdSection { + private String providerName; + private String apiName; + private String version; + private int id; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Tier { + private String name; + private String displayName; + private String description; + private int requestsPerMin; + private int requestCount; + private int unitTime; + private String timeUnit; + private String tierPlan; + private boolean stopOnQuotaReached; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class CorsConfiguration { + private boolean corsConfigurationEnabled; + private List accessControlAllowOrigins; + private boolean accessControlAllowCredentials; + private List accessControlAllowHeaders; + private List accessControlAllowMethods; + } + + // ----------- typový objekt endpointConfig ----------- + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class EndpointConfig { + @JsonProperty("endpoint_type") + private String endpointType; + + @JsonProperty("sandbox_endpoints") + private Endpoint sandboxEndpoints; + + @JsonProperty("production_endpoints") + private Endpoint productionEndpoints; + + @JsonProperty("endpoint_security") + private EndpointSecurity endpointSecurity; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Endpoint { + private String url; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class EndpointSecurity { + private SecurityEnvironment sandbox; + private SecurityEnvironment production; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class SecurityEnvironment { + private String tokenUrl; + private String clientId; + private String clientSecret; + private String password; + private String username; + private String type; + private String grantType; + private boolean enabled; + private String customParameters; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ProxyConfigs { + private boolean proxyEnabled; + private String proxyPort; + private String proxyProtocol; + private String proxyUsername; + private String proxyPassword; + private String proxyHost; + } +} + + diff --git a/src/main/java/cz/trask/migration/model/ApiDefinition45.java b/src/main/java/cz/trask/migration/model/ApiDefinition45.java new file mode 100644 index 0000000..fddb7f7 --- /dev/null +++ b/src/main/java/cz/trask/migration/model/ApiDefinition45.java @@ -0,0 +1,200 @@ +package cz.trask.migration.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class ApiDefinition45 { + + private String type; + private String version; + private DataSection data; + + @lombok.Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class DataSection { + private String id; + private String name; + private String description; + private String context; + private String version; + private String provider; + private String lifeCycleStatus; + private boolean responseCachingEnabled; + private int cacheTimeout; + private boolean hasThumbnail; + private boolean isDefaultVersion; + private boolean isRevision; + private int revisionId; + private boolean enableSchemaValidation; + private boolean enableSubscriberVerification; + private String type; + private List audiences; + private List transport; + private List tags; + private List policies; + private List organizationPolicies; + private String authorizationHeader; + private String apiKeyHeader; + private List securityScheme; + private String visibility; + private List visibleRoles; + private List visibleTenants; + private List visibleOrganizations; + private List mediationPolicies; + private ApiPolicies apiPolicies; + private String subscriptionAvailability; + private List subscriptionAvailableTenants; + private List additionalProperties; + private Map additionalPropertiesMap; + private String accessControl; + private List accessControlRoles; + private Map businessInformation; + private CorsConfiguration corsConfiguration; + private WebsubSubscriptionConfiguration websubSubscriptionConfiguration; + private String createdTime; + private String lastUpdatedTimestamp; + private String lastUpdatedTime; + private EndpointConfig endpointConfig; + private String endpointImplementationType; + private SubtypeConfiguration subtypeConfiguration; + private List scopes; + private List operations; + private List categories; + private List keyManagers; + private AdvertiseInfo advertiseInfo; + private String gatewayVendor; + private String gatewayType; + private List asyncTransportProtocols; + private boolean egress; + private String organizationId; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ApiPolicies { + private List request; + private List response; + private List fault; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Policy { + private String policyName; + private String policyVersion; + private String policyType; + private String policyId; + private Map parameters; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class CorsConfiguration { + private boolean corsConfigurationEnabled; + private List accessControlAllowOrigins; + private boolean accessControlAllowCredentials; + private List accessControlAllowHeaders; + private List accessControlAllowMethods; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class WebsubSubscriptionConfiguration { + private boolean enable; + private String secret; + private String signingAlgorithm; + private String signatureHeader; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class EndpointConfig { + private String endpoint_type; + private EndpointGroup sandbox_endpoints; + private EndpointGroup production_endpoints; + private EndpointSecurity endpoint_security; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class EndpointGroup { + private String url; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class EndpointSecurity { + private SecurityEnv sandbox; + private SecurityEnv production; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class SecurityEnv { + private String tokenUrl; + private String clientId; + private int connectionTimeoutDuration; + private String type; + private int socketTimeoutDuration; + private boolean enabled; + private ProxyConfigs proxyConfigs; + private String password; + private String clientSecret; + private Map customParameters; + private Map additionalProperties; + private String grantType; + private int connectionRequestTimeoutDuration; + private String username; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ProxyConfigs { + private boolean proxyEnabled; + private String proxyPort; + private String proxyProtocol; + private String proxyUsername; + private String proxyPassword; + private String proxyHost; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class SubtypeConfiguration { + private String subtype; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Operation { + private String id; + private String target; + private String verb; + private String authType; + private String throttlingPolicy; + private List scopes; + private List usedProductIds; + private OperationPolicies operationPolicies; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class OperationPolicies { + private List request; + private List response; + private List fault; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + public static class AdvertiseInfo { + private boolean advertised; + private String apiOwner; + private String vendor; + } +} diff --git a/src/main/java/cz/trask/migration/model/v32/ApiDefinition.java b/src/main/java/cz/trask/migration/model/v32/ApiDefinition.java deleted file mode 100644 index 971adfa..0000000 --- a/src/main/java/cz/trask/migration/model/v32/ApiDefinition.java +++ /dev/null @@ -1,168 +0,0 @@ -package cz.trask.migration.model.v32; - -import java.io.IOException; -import java.util.List; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; - -public class ApiDefinition { - - public static class CorsConfiguration { - @JsonProperty("corsConfigurationEnabled") - public boolean corsConfigurationEnabled; - - @JsonProperty("accessControlAllowOrigins") - public List accessControlAllowOrigins; - - @JsonProperty("accessControlAllowCredentials") - public boolean accessControlAllowCredentials; - - @JsonProperty("accessControlAllowHeaders") - public List accessControlAllowHeaders; - - @JsonProperty("accessControlAllowMethods") - public List accessControlAllowMethods; - } - - public static class Tier { - public String name; - public String displayName; - public String description; - public long requestsPerMin; - public long requestCount; - public int unitTime; - public String timeUnit; - public String tierPlan; - public boolean stopOnQuotaReached; - } - - public static class EndpointSecurity { - public static class SecurityConfig { - public String password; - public String tokenUrl; - public String clientId; - public String clientSecret; - public String customParameters; - public String type; - public String grantType; - public boolean enabled; - public String username; - } - - public SecurityConfig production; - public SecurityConfig sandbox; - } - - public static class Id { - public String providerName; - public String apiName; - public String version; - public long id; - } - - public static class ApiTierPolicy { - public String name; - public String displayName; - public String description; - public long requestsPerMin; - public long requestCount; - public int unitTime; - public String timeUnit; - public String tierPlan; - public boolean stopOnQuotaReached; - } - - public static class EndpointConfig { - public String endpoint_type; - public Endpoint sandbox_endpoints; - public Endpoint production_endpoints; - public EndpointSecurity endpoint_security; - - public static class Endpoint { - public String url; - } - - public static class EndpointSecurity { - public SecurityConfig production; - public SecurityConfig sandbox; - - public static class SecurityConfig { - public String password; - public String tokenUrl; - public String clientId; - public String clientSecret; - public String customParameters; - public String type; - public String grantType; - public boolean enabled; - public String username; - } - } - } - - // --- Hlavní pole --- - public Id id; - public String uuid; - public String type; - public String context; - public String contextTemplate; - public List tags; - public List documents; - public String lastUpdated; - public List availableTiers; - public List availableSubscriptionLevelPolicies; - public List uriTemplates; - public boolean apiHeaderChanged; - public boolean apiResourcePatternsChanged; - public String status; - public String visibility; - public List gatewayLabels; - public boolean endpointSecured; - public boolean endpointAuthDigest; - public String transports; - public String inSequence; - public boolean advertiseOnly; - public String subscriptionAvailability; - public CorsConfiguration corsConfiguration; - @JsonDeserialize(using = EndpointConfigDeserializer.class) - public EndpointConfig endpointConfig; - public String responseCache; - public int cacheTimeout; - public String implementation; - public String authorizationHeader; - public List scopes; - public boolean isDefaultVersion; - public boolean isPublishedDefaultVersion; - public List keyManagers; - public List environments; - public String createdTime; - public Map additionalProperties; - public Map monetizationProperties; - public boolean isMonetizationEnabled; - public List environmentList; - public String apiSecurity; - public List endpoints; - public boolean enableSchemaValidation; - public List apiCategories; - public boolean enableStore; - public String accessControl; - public double rating; - public boolean isLatest; - - public static class EndpointConfigDeserializer extends JsonDeserializer { - - @Override - public EndpointConfig deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - String json = p.getValueAsString(); // YAML string - ObjectMapper mapper = new ObjectMapper(); // běžný JSON mapper - return mapper.readValue(json, EndpointConfig.class); - } - } - -}