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
