You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/02/12 02:45:24 UTC
[camel] 14/18: Remove reflection calls used for merging rest
configurations
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0fac7a1c168930a347278c90ca186815ac13b914
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Feb 11 21:43:01 2020 +0100
Remove reflection calls used for merging rest configurations
---
.../apache/camel/component/rest/RestComponent.java | 76 +++++++++++++---------
1 file changed, 44 insertions(+), 32 deletions(-)
diff --git a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
index 1e824d6..36df25f 100644
--- a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
+++ b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
@@ -19,19 +19,16 @@ package org.apache.camel.component.rest;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.function.Consumer;
-import java.util.function.Supplier;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
-import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.component.extension.ComponentVerifierExtension;
-import org.apache.camel.spi.BeanIntrospection;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RestConfiguration.RestBindingMode;
+import org.apache.camel.spi.RestConfiguration.RestHostNameResolver;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.DefaultComponent;
-import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.URISupport;
@@ -237,43 +234,58 @@ public class RestComponent extends DefaultComponent {
return conf;
}
if (from != null) {
- BeanIntrospection beanIntrospection = camelContext.adapt(ExtendedCamelContext.class).getBeanIntrospection();
- Map<String, Object> map = new HashMap<>();
- beanIntrospection.getProperties(from, map, null, false);
-
- // Remove properties as they need to be manually managed
- map.entrySet().removeIf(entry -> entry.getValue() instanceof Map);
-
- // Copy common options, will override those in conf
- PropertyBindingSupport.bindProperties(getCamelContext(), conf, map);
-
// Merge properties
- mergeProperties(conf::getComponentProperties, from::getComponentProperties, conf::setComponentProperties);
- mergeProperties(conf::getEndpointProperties, from::getEndpointProperties, conf::setEndpointProperties);
- mergeProperties(conf::getConsumerProperties, from::getConsumerProperties, conf::setConsumerProperties);
- mergeProperties(conf::getDataFormatProperties, from::getDataFormatProperties, conf::setDataFormatProperties);
- mergeProperties(conf::getApiProperties, from::getApiProperties, conf::setApiProperties);
- mergeProperties(conf::getCorsHeaders, from::getCorsHeaders, conf::setCorsHeaders);
+ conf.setComponent(or(conf.getComponent(), from.getComponent()));
+ conf.setApiComponent(or(conf.getApiComponent(), from.getApiComponent()));
+ conf.setProducerComponent(or(conf.getProducerComponent(), from.getProducerComponent()));
+ conf.setProducerApiDoc(or(conf.getProducerApiDoc(), from.getProducerApiDoc()));
+ conf.setScheme(or(conf.getScheme(), from.getScheme()));
+ conf.setHost(or(conf.getHost(), from.getHost()));
+ conf.setUseXForwardHeaders(or(conf.isUseXForwardHeaders(), from.isUseXForwardHeaders()));
+ conf.setContextPath(or(conf.getContextPath(), from.getContextPath()));
+ conf.setApiContextPath(or(conf.getApiContextPath(), from.getApiContextPath()));
+ conf.setApiContextRouteId(or(conf.getApiContextRouteId(), from.getApiContextRouteId()));
+ conf.setApiContextIdPattern(or(conf.getApiContextIdPattern(), from.getApiContextIdPattern()));
+ conf.setApiContextListing(or(conf.isApiContextListing(), from.isApiContextListing()));
+ conf.setApiVendorExtension(or(conf.isApiVendorExtension(), from.isApiVendorExtension()));
+ conf.setHostNameResolver(or(conf.getHostNameResolver(), from.getHostNameResolver(), RestHostNameResolver.allLocalIp));
+ conf.setBindingMode(or(conf.getBindingMode(), from.getBindingMode(), RestBindingMode.off));
+ conf.setSkipBindingOnErrorCode(or(conf.isSkipBindingOnErrorCode(), from.isSkipBindingOnErrorCode()));
+ conf.setClientRequestValidation(or(conf.isClientRequestValidation(), from.isClientRequestValidation()));
+ conf.setEnableCORS(or(conf.isEnableCORS(), from.isEnableCORS()));
+ conf.setJsonDataFormat(or(conf.getJsonDataFormat(), from.getJsonDataFormat()));
+ conf.setXmlDataFormat(or(conf.getXmlDataFormat(), from.getXmlDataFormat()));
+ conf.setComponentProperties(mergeProperties(conf.getComponentProperties(), from.getComponentProperties()));
+ conf.setEndpointProperties(mergeProperties(conf.getEndpointProperties(), from.getEndpointProperties()));
+ conf.setConsumerProperties(mergeProperties(conf.getConsumerProperties(), from.getConsumerProperties()));
+ conf.setDataFormatProperties(mergeProperties(conf.getDataFormatProperties(), from.getDataFormatProperties()));
+ conf.setApiProperties(mergeProperties(conf.getApiProperties(), from.getApiProperties()));
+ conf.setCorsHeaders(mergeProperties(conf.getCorsHeaders(), from.getCorsHeaders()));
}
return conf;
}
- private <T> void mergeProperties(Supplier<Map<String, T>> base, Supplier<Map<String, T>> addons, Consumer<Map<String, T>> consumer) {
- Map<String, T> baseMap = base.get();
- Map<String, T> addonsMap = addons.get();
+ private <T> T or(T t1, T t2) {
+ return t2 != null ? t2 : t1;
+ }
- if (baseMap != null || addonsMap != null) {
- HashMap<String, T> result = new HashMap<>();
- if (baseMap != null) {
- result.putAll(baseMap);
+ private <T> T or(T t1, T t2, T def) {
+ return t2 != null && t2 != def ? t2 : t1;
+ }
+
+ private <T> Map<String, T> mergeProperties(Map<String, T> base, Map<String, T> addons) {
+ if (base != null || addons != null) {
+ Map<String, T> result = new HashMap<>();
+ if (base != null) {
+ result.putAll(base);
}
- if (addonsMap != null) {
- result.putAll(addonsMap);
+ if (addons != null) {
+ result.putAll(addons);
}
-
- consumer.accept(result);
+ return result;
}
+ return base;
}
public ComponentVerifierExtension getVerifier() {