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);

Reply via email to