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 9e3d24b6f977091a5f2fdf3af74d6b327b29116e
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jun 23 07:04:34 2020 +0200

    CAMEL-15224: camel-api-component - Avoid reflection when configured nested 
configuration classes.
---
 .../apache/camel/component/olingo4/Olingo4Endpoint.java   | 15 ++++++++++++++-
 .../component/olingo4/AbstractOlingo4TestSupport.java     | 10 ++--------
 .../component/olingo4/Olingo4ComponentConsumerTest.java   |  9 ++++++---
 .../component/olingo4/Olingo4ComponentProducerTest.java   | 15 +++++++++++++++
 4 files changed, 37 insertions(+), 12 deletions(-)

diff --git 
a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Endpoint.java
 
b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Endpoint.java
index b9e462d..9415491 100644
--- 
a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Endpoint.java
+++ 
b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Endpoint.java
@@ -33,6 +33,7 @@ import 
org.apache.camel.component.olingo4.internal.Olingo4ApiName;
 import org.apache.camel.component.olingo4.internal.Olingo4Constants;
 import org.apache.camel.component.olingo4.internal.Olingo4PropertiesHelper;
 import org.apache.camel.spi.PropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.PropertyBindingSupport;
@@ -119,8 +120,20 @@ public class Olingo4Endpoint extends 
AbstractApiEndpoint<Olingo4ApiName, Olingo4
             }
         });
         options.keySet().removeIf(known::containsKey);
+
+        // configure endpoint first (from the known options) and then 
specialized configuration class afterwards
+        PropertyConfigurer configurer = 
getComponent().getEndpointPropertyConfigurer();
+        if (configurer instanceof PropertyConfigurerGetter) {
+            PropertyConfigurerGetter getter = (PropertyConfigurerGetter) 
configurer;
+            for (String name : getter.getAllOptions(this).keySet()) {
+                if (known.containsKey(name)) {
+                    Object value = known.remove(name);
+                    configurer.configure(getCamelContext(), this, name, value, 
true);
+                }
+            };
+        }
         // configure on configuration first to be reflection free
-        PropertyConfigurer configurer = 
getCamelContext().adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(configuration.getClass().getSimpleName(),
 getCamelContext());
+        configurer = 
getCamelContext().adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(configuration.getClass().getSimpleName(),
 getCamelContext());
         if (configurer != null) {
             PropertyBindingSupport.build()
                     .withConfigurer(configurer)
diff --git 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/AbstractOlingo4TestSupport.java
 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/AbstractOlingo4TestSupport.java
index 9a58826..99e302f 100644
--- 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/AbstractOlingo4TestSupport.java
+++ 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/AbstractOlingo4TestSupport.java
@@ -17,12 +17,10 @@
 package org.apache.camel.component.olingo4;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
-import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.apache.http.HttpHost;
 import org.apache.http.client.ClientProtocolException;
@@ -50,15 +48,11 @@ public class AbstractOlingo4TestSupport extends 
CamelTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-
         final CamelContext context = super.createCamelContext();
 
-        Map<String, Object> options = new HashMap<>();
-        options.put("serviceUri", getRealServiceUrl(TEST_SERVICE_BASE_URL));
-        options.put("contentType", "application/json;charset=utf-8");
-
         final Olingo4Configuration configuration = new Olingo4Configuration();
-        PropertyBindingSupport.bindProperties(context, configuration, options);
+        configuration.setServiceUri(getRealServiceUrl(TEST_SERVICE_BASE_URL));
+        configuration.setContentType("application/json;charset=utf-8");
 
         // add OlingoComponent to Camel context
         final Olingo4Component component = new Olingo4Component(context);
diff --git 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
index 81e6024..706833e 100644
--- 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
+++ 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
@@ -93,9 +93,8 @@ public class Olingo4ComponentConsumerTest extends 
AbstractOlingo4TestSupport {
         }
 
         // should be reflection free
-        // TODO: We are down to 2 calls now (from unit test itself)
-//        long counter = 
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getInvokedCounter();
-//        assertEquals(0, counter);
+        long counter = 
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getInvokedCounter();
+        assertEquals(0, counter);
     }
 
     /**
@@ -280,6 +279,10 @@ public class Olingo4ComponentConsumerTest extends 
AbstractOlingo4TestSupport {
         ClientProperty nameProp = ksfoEntity.getProperty("Name");
         assertNotNull(nameProp);
         assertEquals("San Francisco International Airport", 
nameProp.getValue().toString());
+
+        // should be reflection free
+        long counter = 
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getInvokedCounter();
+        assertEquals(0, counter);
     }
 
     /**
diff --git 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
index e524bf5..00b8ab5 100644
--- 
a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
+++ 
b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
@@ -22,7 +22,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.olingo4.api.batch.Olingo4BatchChangeRequest;
@@ -73,6 +76,14 @@ public class Olingo4ComponentProducerTest extends 
AbstractOlingo4TestSupport {
     private static final String TEST_UPDATE_JSON = "{\n" + "  \"UserName\": 
\"lewisblack\",\n" + "  \"FirstName\": \"Lewis\",\n" + "  \"MiddleName\": 
\"Black\",\n"
                                                    + "  \"LastName\": 
\"Black\"\n" + "}";
 
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setLoggingLevel(LoggingLevel.INFO);
+        
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().setExtendedStatistics(true);
+        return context;
+    }
+
     @Test
     public void testRead() throws Exception {
         final Map<String, Object> headers = new HashMap<>();
@@ -125,6 +136,10 @@ public class Olingo4ComponentProducerTest extends 
AbstractOlingo4TestSupport {
 
         final ClientEntity unbFuncReturn = 
(ClientEntity)requestBodyAndHeaders("direct:callunboundfunction", null, 
headers);
         assertNotNull(unbFuncReturn);
+
+        // should be reflection free
+        long counter = 
context.adapt(ExtendedCamelContext.class).getBeanIntrospection().getInvokedCounter();
+        assertEquals(0, counter);
     }
 
     @Test

Reply via email to