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 ca5a55dede37a0a8f8ba5aeb53d9513eb4af7a30 Author: Guillaume Nodet <[email protected]> AuthorDate: Tue Sep 15 09:49:29 2020 +0200 [CAMEL-15446] AbstractCamelContext methods with similar behavior --- .../camel/impl/engine/AbstractCamelContext.java | 131 ++++----------------- .../org/apache/camel/support/DefaultComponent.java | 90 +------------- 2 files changed, 26 insertions(+), 195 deletions(-) diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index 960a946..58fc598 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -771,31 +771,41 @@ public abstract class AbstractCamelContext extends BaseService @Override public Endpoint getEndpoint(String uri) { - return doGetEndpoint(uri, false, false); + return doGetEndpoint(uri, null, false, false); } @Override public Endpoint getEndpoint(NormalizedEndpointUri uri) { - return doGetEndpoint(uri.getUri(), true, false); + return doGetEndpoint(uri.getUri(), null, true, false); } @Override public Endpoint getPrototypeEndpoint(String uri) { - return doGetEndpoint(uri, false, true); + return doGetEndpoint(uri, null, false, true); } @Override public Endpoint getPrototypeEndpoint(NormalizedEndpointUri uri) { - return doGetEndpoint(uri.getUri(), true, true); + return doGetEndpoint(uri.getUri(), null, true, true); } - protected Endpoint doGetEndpoint(String uri, boolean normalized, boolean prototype) { - // ensure CamelContext are initialized before we can get a component + @Override + public Endpoint getEndpoint(String uri, Map<String, Object> parameters) { + return doGetEndpoint(uri, parameters, false, false); + } + + @Override + public Endpoint getEndpoint(NormalizedEndpointUri uri, Map<String, Object> parameters) { + return doGetEndpoint(uri.getUri(), parameters, true, false); + } + + protected Endpoint doGetEndpoint(String uri, Map<String, Object> parameters, boolean normalized, boolean prototype) { + // ensure CamelContext are initialized before we can get an endpoint build(); StringHelper.notEmpty(uri, "uri"); - LOG.trace("Getting endpoint with uri: {}", uri); + LOG.trace("Getting endpoint with uri: {} and parameters: {}", uri, parameters); // in case path has property placeholders then try to let property // component resolve those @@ -846,11 +856,9 @@ public abstract class AbstractCamelContext extends BaseService LOG.trace("Creating endpoint from uri: {} using component: {}", uri, component); // Have the component create the endpoint if it can. - if (component.useRawUri()) { - answer = component.createEndpoint(rawUri); - } else { - answer = component.createEndpoint(uri); - } + answer = component.createEndpoint( + component.useRawUri() ? rawUri : uri, + parameters); if (answer != null && LOG.isDebugEnabled()) { LOG.debug("{} converted to endpoint: {} by component: {}", URISupport.sanitizeUri(uri), answer, @@ -895,105 +903,6 @@ public abstract class AbstractCamelContext extends BaseService } @Override - public Endpoint getEndpoint(String uri, Map<String, Object> parameters) { - return doGetEndpoint(uri, parameters, false); - } - - @Override - public Endpoint getEndpoint(NormalizedEndpointUri uri, Map<String, Object> parameters) { - return doGetEndpoint(uri.getUri(), parameters, true); - } - - protected Endpoint doGetEndpoint(String uri, Map<String, Object> parameters, boolean normalized) { - // ensure CamelContext are initialized before we can get an endpoint - init(); - - StringHelper.notEmpty(uri, "uri"); - - LOG.trace("Getting endpoint with uri: {} and parameters: {}", uri, parameters); - - // in case path has property placeholders then try to let property - // component resolve those - if (!normalized) { - try { - uri = resolvePropertyPlaceholders(uri); - } catch (Exception e) { - throw new ResolveEndpointFailedException(uri, e); - } - } - - final String rawUri = uri; - - // normalize uri so we can do endpoint hits with minor mistakes and - // parameters is not in the same order - if (!normalized) { - uri = EndpointHelper.normalizeEndpointUri(uri); - } - - LOG.trace("Getting endpoint with raw uri: {}, normalized uri: {}", rawUri, uri); - - Endpoint answer; - String scheme = null; - // use optimized method to get the endpoint uri - EndpointKey key = getEndpointKeyPreNormalized(uri); - answer = endpoints.get(key); - if (answer == null) { - try { - scheme = StringHelper.before(uri, ":"); - if (scheme == null) { - // it may refer to a logical endpoint - answer = getRegistry().lookupByNameAndType(uri, Endpoint.class); - if (answer != null) { - return answer; - } else { - throw new NoSuchEndpointException(uri); - } - } - LOG.trace("Endpoint uri: {} is from component with name: {}", uri, scheme); - Component component = getComponent(scheme); - ServiceHelper.initService(component); - - // Ask the component to resolve the endpoint. - if (component != null) { - LOG.trace("Creating endpoint from uri: {} using component: {}", uri, component); - - // Have the component create the endpoint if it can. - if (component.useRawUri()) { - answer = component.createEndpoint(rawUri, parameters); - } else { - answer = component.createEndpoint(uri, parameters); - } - - if (answer != null && LOG.isDebugEnabled()) { - LOG.debug("{} converted to endpoint: {} by component: {}", URISupport.sanitizeUri(uri), answer, - component); - } - } - - if (answer == null) { - // no component then try in registry and elsewhere - answer = createEndpoint(uri); - LOG.trace("No component to create endpoint from uri: {} fallback lookup in registry -> {}", uri, answer); - } - - if (answer != null) { - addService(answer); - answer = addEndpointToRegistry(uri, answer); - } - } catch (Exception e) { - throw new ResolveEndpointFailedException(uri, e); - } - } - - // unknown scheme - if (answer == null) { - throw new ResolveEndpointFailedException(uri, "No component found with scheme: " + scheme); - } - - return answer; - } - - @Override public <T extends Endpoint> T getEndpoint(String name, Class<T> endpointType) { Endpoint endpoint = getEndpoint(name); if (endpoint == null) { diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java index b6b555e..15cafd2 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java @@ -131,90 +131,6 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone // an endpoint and want to have the parameter values without the RAW tokens URISupport.resolveRawParameterValues(parameters); - validateURI(uri, path, parameters); - if (LOG.isTraceEnabled()) { - // at trace level its okay to have parameters logged, that may contain passwords - LOG.trace("Creating endpoint uri=[{}], path=[{}], parameters=[{}]", URISupport.sanitizeUri(uri), - URISupport.sanitizePath(path), parameters); - } else if (LOG.isDebugEnabled()) { - // but at debug level only output sanitized uris - LOG.debug("Creating endpoint uri=[{}], path=[{}]", URISupport.sanitizeUri(uri), URISupport.sanitizePath(path)); - } - - // extract these global options and infer their value based on global/component level configuration - boolean basic = getAndRemoveParameter(parameters, "basicPropertyBinding", boolean.class, basicPropertyBinding - ? basicPropertyBinding : getCamelContext().getGlobalEndpointConfiguration().isBasicPropertyBinding()); - boolean bridge = getAndRemoveParameter(parameters, "bridgeErrorHandler", boolean.class, bridgeErrorHandler - ? bridgeErrorHandler : getCamelContext().getGlobalEndpointConfiguration().isBridgeErrorHandler()); - boolean lazy = getAndRemoveParameter(parameters, "lazyStartProducer", boolean.class, lazyStartProducer - ? lazyStartProducer : getCamelContext().getGlobalEndpointConfiguration().isLazyStartProducer()); - - // create endpoint - Endpoint endpoint = createEndpoint(uri, path, parameters); - if (endpoint == null) { - return null; - } - // inject camel context - endpoint.setCamelContext(getCamelContext()); - - // and setup those global options afterwards - if (endpoint instanceof DefaultEndpoint) { - DefaultEndpoint de = (DefaultEndpoint) endpoint; - de.setBasicPropertyBinding(basic); - de.setBridgeErrorHandler(bridge); - de.setLazyStartProducer(lazy); - } - - // configure remainder of the parameters - setProperties(endpoint, parameters); - - // if endpoint is strict (not lenient) and we have unknown parameters configured then - // fail if there are parameters that could not be set, then they are probably misspell or not supported at all - if (!endpoint.isLenientProperties()) { - validateParameters(uri, parameters, null); - } - - afterConfiguration(uri, path, endpoint, parameters); - return endpoint; - } - - @Override - public Endpoint createEndpoint(String uri) throws Exception { - // need to encode before its safe to parse with java.net.Uri - String encodedUri = UnsafeUriCharactersEncoder.encode(uri); - URI u = new URI(encodedUri); - String path; - if (u.getScheme() != null) { - // if there is a scheme then there is also a path - path = URISupport.extractRemainderPath(u, useRawUri()); - } else { - // this uri has no context-path as the leading text is the component name (scheme) - path = null; - } - - Map<String, Object> parameters; - if (useRawUri()) { - // when using raw uri then the query is taking from the uri as is - String query; - int idx = uri.indexOf('?'); - if (idx > -1) { - query = uri.substring(idx + 1); - } else { - query = u.getRawQuery(); - } - // and use method parseQuery - parameters = URISupport.parseQuery(query, true); - } else { - // however when using the encoded (default mode) uri then the query, - // is taken from the URI (ensures values is URI encoded) - // and use method parseParameters - parameters = URISupport.parseParameters(u); - } - // parameters using raw syntax: RAW(value) - // should have the token removed, so its only the value we have in parameters, as we are about to create - // an endpoint and want to have the parameter values without the RAW tokens - URISupport.resolveRawParameterValues(parameters); - // use encoded or raw uri? uri = useRawUri() ? uri : encodedUri; @@ -236,6 +152,7 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone boolean lazy = getAndRemoveParameter(parameters, "lazyStartProducer", boolean.class, lazyStartProducer ? lazyStartProducer : getCamelContext().getGlobalEndpointConfiguration().isLazyStartProducer()); + // create endpoint Endpoint endpoint = createEndpoint(uri, path, parameters); if (endpoint == null) { return null; @@ -270,6 +187,11 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone } @Override + public Endpoint createEndpoint(String uri) throws Exception { + return createEndpoint(uri, null); + } + + @Override public boolean useRawUri() { // should use encoded uri by default return false;
