This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 54f0adb4a6fa0580d39216d8d01354b5478ca148 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Jun 10 10:35:11 2020 +0200 CAMEL-15143: Remove some duplicate code and enable tests for swagger and openapi. --- components/camel-openapi-java/pom.xml | 5 +++ .../apache/camel/openapi/RestOpenApiReader.java | 5 +-- .../apache/camel/openapi/RestOpenApiSupport.java | 36 ++++++------------- .../RestOpenApiReaderPropertyPlaceholderTest.java | 3 +- components/camel-swagger-java/pom.xml | 5 +++ .../apache/camel/swagger/RestSwaggerSupport.java | 41 +++++----------------- .../RestSwaggerReaderPropertyPlaceholderTest.java | 3 +- 7 files changed, 34 insertions(+), 64 deletions(-) diff --git a/components/camel-openapi-java/pom.xml b/components/camel-openapi-java/pom.xml index 6408fcc..bf1355f 100644 --- a/components/camel-openapi-java/pom.xml +++ b/components/camel-openapi-java/pom.xml @@ -101,6 +101,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-undertow</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <scope>test</scope> diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java index faf9e67..a58105e 100644 --- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java +++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java @@ -98,14 +98,15 @@ public class RestOpenApiReader { public OasDocument read(List<RestDefinition> rests, String route, BeanConfig config, String camelContextId, ClassResolver classResolver) throws ClassNotFoundException { - OasDocument openApi = null; + + OasDocument openApi; if (config.isOpenApi3()) { openApi = new Oas30Document(); } else { openApi = new Oas20Document(); } - for (RestDefinition rest : rests) { + for (RestDefinition rest : rests) { if (org.apache.camel.util.ObjectHelper.isNotEmpty(route) && !route.equals("/")) { // filter by route if (!rest.getPath().equals(route)) { diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java index f07bb8d..f1d70bd 100644 --- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java +++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Matcher; @@ -202,34 +203,17 @@ public class RestOpenApiSupport { // use a routes definition to dump the rests RestsDefinition def = new RestsDefinition(); def.setRests(rests); + ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class); - String xml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def); - - // if resolving placeholders we parse the xml, and resolve the property placeholders during parsing - final AtomicBoolean changed = new AtomicBoolean(); - InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)); - Document dom = XmlLineNumberParser.parseXml(is, new XmlLineNumberParser.XmlTextTransformer() { - @Override - public String transform(String text) { - try { - String after = camelContext.resolvePropertyPlaceholders(text); - if (!changed.get()) { - changed.set(!text.equals(after)); - } - return after; - } catch (Exception e) { - // ignore - return text; - } - } - }); - // okay there were some property placeholder replaced so re-create the model - if (changed.get()) { - xml = camelContext.getTypeConverter().mandatoryConvertTo(String.class, dom); - InputStream xmlis = camelContext.getTypeConverter().convertTo(InputStream.class, xml); - def = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, xmlis); + String originalXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def); + String changedXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def, true, true); + if (!Objects.equals(originalXml, changedXml)) { + // okay so the model had property placeholders which we needed to resolve and output their actual values + // and therefore regenerate the model classes + InputStream isxml = camelContext.getTypeConverter().convertTo(InputStream.class, changedXml); + def = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, isxml); if (def != null) { - return def.getRests(); + rests = def.getRests(); } } diff --git a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java index f500bd1..8ce3ffa 100644 --- a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java +++ b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java @@ -34,7 +34,6 @@ import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Ignore; import org.junit.Test; -@Ignore("Does not run well on CI due test uses JMX mbeans") public class RestOpenApiReaderPropertyPlaceholderTest extends CamelTestSupport { @BindToRegistry("dummy-rest") @@ -77,7 +76,7 @@ public class RestOpenApiReaderPropertyPlaceholderTest extends CamelTestSupport { RestOpenApiReader reader = new RestOpenApiReader(); RestOpenApiSupport support = new RestOpenApiSupport(); - List<RestDefinition> rests = support.getRestDefinitions(context, context.getName()); + List<RestDefinition> rests = support.getRestDefinitions(context); OasDocument openApi = reader.read(rests, null, config, context.getName(), new DefaultClassResolver()); assertNotNull(openApi); diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml index b3dcc3a..7713cc4 100644 --- a/components/camel-swagger-java/pom.xml +++ b/components/camel-swagger-java/pom.xml @@ -134,6 +134,11 @@ <!-- testing --> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-undertow</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-test-spring-junit5</artifactId> <scope>test</scope> </dependency> diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java index 6373a90..e3a86f7 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java @@ -16,24 +16,19 @@ */ package org.apache.camel.swagger; -import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.management.ManagementFactory; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; -import javax.management.AttributeNotFoundException; import javax.management.MBeanServer; import javax.management.ObjectName; -import org.w3c.dom.Document; - import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -57,7 +52,6 @@ import org.apache.camel.spi.RestConfiguration; import org.apache.camel.support.PatternHelper; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.URISupport; -import org.apache.camel.util.xml.XmlLineNumberParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -154,34 +148,17 @@ public class RestSwaggerSupport { // use a routes definition to dump the rests RestsDefinition def = new RestsDefinition(); def.setRests(rests); + ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class); - String xml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def); - - // if resolving placeholders we parse the xml, and resolve the property placeholders during parsing - final AtomicBoolean changed = new AtomicBoolean(); - InputStream is = new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)); - Document dom = XmlLineNumberParser.parseXml(is, new XmlLineNumberParser.XmlTextTransformer() { - @Override - public String transform(String text) { - try { - String after = camelContext.resolvePropertyPlaceholders(text); - if (!changed.get()) { - changed.set(!text.equals(after)); - } - return after; - } catch (Exception e) { - // ignore - return text; - } - } - }); - // okay there were some property placeholder replaced so re-create the model - if (changed.get()) { - xml = camelContext.getTypeConverter().mandatoryConvertTo(String.class, dom); - InputStream isxml = camelContext.getTypeConverter().convertTo(InputStream.class, xml); + String originalXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def); + String changedXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def, true, true); + if (!Objects.equals(originalXml, changedXml)) { + // okay so the model had property placeholders which we needed to resolve and output their actual values + // and therefore regenerate the model classes + InputStream isxml = camelContext.getTypeConverter().convertTo(InputStream.class, changedXml); def = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, isxml); if (def != null) { - return def.getRests(); + rests = def.getRests(); } } diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java index f4b8be2..c660b66 100644 --- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java +++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java @@ -40,7 +40,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Does not run well on CI due test uses JMX mbeans") public class RestSwaggerReaderPropertyPlaceholderTest extends CamelTestSupport { private static final Logger LOG = LoggerFactory.getLogger(RestSwaggerReaderPropertyPlaceholderTest.class); @@ -84,7 +83,7 @@ public class RestSwaggerReaderPropertyPlaceholderTest extends CamelTestSupport { RestSwaggerReader reader = new RestSwaggerReader(); RestSwaggerSupport support = new RestSwaggerSupport(); - List<RestDefinition> rests = support.getRestDefinitions(context, context.getName()); + List<RestDefinition> rests = support.getRestDefinitions(context); Swagger swagger = reader.read(rests, null, config, context.getName(), new DefaultClassResolver()); assertNotNull(swagger);