You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2016/04/20 17:32:15 UTC

camel git commit: Camel CDI: use Java 8 stream API

Repository: camel
Updated Branches:
  refs/heads/master 11a8f695f -> 86bb7d547


Camel CDI: use Java 8 stream API


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/86bb7d54
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/86bb7d54
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/86bb7d54

Branch: refs/heads/master
Commit: 86bb7d547f5f80c09dd0a4e5ddd7e56fce447784
Parents: 11a8f69
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Wed Apr 20 17:31:38 2016 +0200
Committer: Antonin Stefanutti <an...@stefanutti.fr>
Committed: Wed Apr 20 17:31:57 2016 +0200

----------------------------------------------------------------------
 .../org/apache/camel/cdi/BeanManagerHelper.java |  5 +-
 .../apache/camel/cdi/CamelContextProducer.java  | 17 +++--
 .../camel/cdi/CdiCamelBeanPostProcessor.java    | 60 ++++++++--------
 .../org/apache/camel/cdi/CdiCamelExtension.java | 62 ++++++++---------
 .../org/apache/camel/cdi/CdiCamelFactory.java   | 67 ++++++++----------
 .../org/apache/camel/cdi/CdiCamelInjector.java  |  4 +-
 .../org/apache/camel/cdi/CdiCamelRegistry.java  | 39 ++++++-----
 .../java/org/apache/camel/cdi/CdiSpiHelper.java | 72 ++++++++------------
 .../camel/cdi/ForwardingObserverMethod.java     |  3 +-
 .../main/java/org/apache/camel/cdi/Main.java    | 34 ++++-----
 .../apache/camel/cdi/SyntheticAnnotated.java    | 12 ++--
 .../camel/cdi/SyntheticBeanAttributes.java      | 10 +--
 .../org/apache/camel/cdi/XmlCdiBeanFactory.java | 38 ++++++-----
 .../camel/cdi/XmlErrorHandlerFactoryBean.java   |  9 +--
 .../cdi/XmlFactoryBeanInjectionTarget.java      |  4 +-
 .../apache/camel/cdi/XmlProxyFactoryBean.java   | 15 ++--
 .../camel/cdi/XmlServiceExporterBean.java       |  4 +-
 .../cdi/rule/ExpectedDeploymentException.java   | 35 ++++------
 18 files changed, 233 insertions(+), 257 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
index d454270..555b342 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
@@ -19,7 +19,8 @@ package org.apache.camel.cdi;
 import java.lang.annotation.Annotation;
 import java.util.Optional;
 import java.util.Set;
-import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toSet;
 
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
@@ -33,7 +34,7 @@ final class BeanManagerHelper {
     static <T> Set<T> getReferencesByType(BeanManager manager, Class<T> type, Annotation... qualifiers) {
         return manager.getBeans(type, qualifiers).stream()
             .map(bean -> getReference(manager, type, bean))
-            .collect(Collectors.toSet());
+            .collect(toSet());
     }
 
     static <T> Optional<T> getReferenceByName(BeanManager manager, String name, Class<T> type) {

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
index ac226f1..4dbe62e 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
@@ -16,10 +16,12 @@
  */
 package org.apache.camel.cdi;
 
-import  java.beans.Introspector;
 import java.lang.annotation.Annotation;
 import java.util.Set;
-import java.util.stream.Collectors;
+
+import static java.beans.Introspector.decapitalize;
+import static java.util.stream.Collectors.toSet;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.InjectionException;
 import javax.enterprise.inject.spi.Annotated;
@@ -34,13 +36,14 @@ import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.DefaultCamelContextNameStrategy;
 import org.apache.camel.impl.ExplicitCamelContextNameStrategy;
 import org.apache.camel.spi.CamelContextNameStrategy;
-import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.cdi.AnyLiteral.ANY;
+import static org.apache.camel.cdi.CdiSpiHelper.getRawType;
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
+import static org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException;
 
 final class CamelContextProducer<T extends CamelContext> extends DelegateProducer<T> {
 
@@ -82,7 +85,7 @@ final class CamelContextProducer<T extends CamelContext> extends DelegateProduce
         Set<Annotation> qualifiers = annotated.getAnnotations().stream()
             .filter(isAnnotationType(Named.class).negate()
                 .and(q -> manager.isQualifier(q.annotationType())))
-            .collect(Collectors.toSet());
+            .collect(toSet());
         qualifiers.add(ANY);
         if (qualifiers.size() == 1) {
             qualifiers.add(DEFAULT);
@@ -104,7 +107,7 @@ final class CamelContextProducer<T extends CamelContext> extends DelegateProduce
             try {
                 context.stop();
             } catch (Exception cause) {
-                throw ObjectHelper.wrapRuntimeCamelException(cause);
+                throw wrapRuntimeCamelException(cause);
             }
         }
     }
@@ -121,10 +124,10 @@ final class CamelContextProducer<T extends CamelContext> extends DelegateProduce
                 } else if (annotated instanceof AnnotatedMethod) {
                     name = ((AnnotatedMethod) annotated).getJavaMember().getName();
                     if (name.startsWith("get")) {
-                        name = Introspector.decapitalize(name.substring(3));
+                        name = decapitalize(name.substring(3));
                     }
                 } else {
-                    name = Introspector.decapitalize(CdiSpiHelper.getRawType(annotated.getBaseType()).getSimpleName());
+                    name = decapitalize(getRawType(annotated.getBaseType()).getSimpleName());
                 }
             }
             return new ExplicitCamelContextNameStrategy(name);

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
index 8ca6092..f19a3a5 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
@@ -48,43 +48,41 @@ final class CdiCamelBeanPostProcessor extends DefaultCamelBeanPostProcessor {
     }
 
     protected void injectFields(final Object bean, final String beanName) {
-        ReflectionHelper.doWithFields(bean.getClass(), new ReflectionHelper.FieldCallback() {
-            public void doWith(Field field) throws IllegalAccessException {
-                PropertyInject propertyInject = field.getAnnotation(PropertyInject.class);
-                if (propertyInject != null) {
-                    try {
-                        injectFieldProperty(field, propertyInject.value(), propertyInject.defaultValue(), propertyInject.context(), bean, beanName);
-                    } catch (Exception cause) {
-                        throw new InjectionException("Injection of [" + propertyInject + "] for field [" + field + "] failed!", cause);
-                    }
+        ReflectionHelper.doWithFields(bean.getClass(), field -> {
+            PropertyInject propertyInject = field.getAnnotation(PropertyInject.class);
+            if (propertyInject != null) {
+                try {
+                    injectFieldProperty(field, propertyInject.value(), propertyInject.defaultValue(), propertyInject.context(), bean, beanName);
+                } catch (Exception cause) {
+                    throw new InjectionException("Injection of [" + propertyInject + "] for field [" + field + "] failed!", cause);
                 }
+            }
 
-                BeanInject beanInject = field.getAnnotation(BeanInject.class);
-                // TODO: proper support for multi Camel contexts
-                if (beanInject != null && getPostProcessorHelper().matchContext(beanInject.context())) {
-                    try {
-                        injectFieldBean(field, beanInject.value(), bean, beanName);
-                    } catch (Exception cause) {
-                        throw new InjectionException("Injection of [" + beanInject + "] for field [" + field + "] failed!", cause);
-                    }
+            BeanInject beanInject = field.getAnnotation(BeanInject.class);
+            // TODO: proper support for multi Camel contexts
+            if (beanInject != null && getPostProcessorHelper().matchContext(beanInject.context())) {
+                try {
+                    injectFieldBean(field, beanInject.value(), bean, beanName);
+                } catch (Exception cause) {
+                    throw new InjectionException("Injection of [" + beanInject + "] for field [" + field + "] failed!", cause);
                 }
+            }
 
-                EndpointInject endpointInject = field.getAnnotation(EndpointInject.class);
-                if (endpointInject != null) {
-                    try {
-                        injectField(field, endpointInject.uri(), endpointInject.ref(), endpointInject.property(), endpointInject.context(), bean, beanName);
-                    } catch (Exception cause) {
-                        throw new InjectionException("Injection of [" + endpointInject + "] for field [" + field + "] failed!", cause);
-                    }
+            EndpointInject endpointInject = field.getAnnotation(EndpointInject.class);
+            if (endpointInject != null) {
+                try {
+                    injectField(field, endpointInject.uri(), endpointInject.ref(), endpointInject.property(), endpointInject.context(), bean, beanName);
+                } catch (Exception cause) {
+                    throw new InjectionException("Injection of [" + endpointInject + "] for field [" + field + "] failed!", cause);
                 }
+            }
 
-                Produce produce = field.getAnnotation(Produce.class);
-                if (produce != null) {
-                    try {
-                        injectField(field, produce.uri(), produce.ref(), produce.property(), produce.context(), bean, beanName);
-                    } catch (Exception cause) {
-                        throw new InjectionException("Injection of [" + produce + "] for field [" + field + "] failed!", cause);
-                    }
+            Produce produce = field.getAnnotation(Produce.class);
+            if (produce != null) {
+                try {
+                    injectField(field, produce.uri(), produce.ref(), produce.property(), produce.context(), bean, beanName);
+                } catch (Exception cause) {
+                    throw new InjectionException("Injection of [" + produce + "] for field [" + field + "] failed!", cause);
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index 6808a43..4e38b77 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -22,16 +22,19 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.EventObject;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static java.util.Collections.newSetFromMap;
+import static java.util.Collections.singleton;
+import static java.util.function.Predicate.isEqual;
+import static java.util.stream.Collectors.collectingAndThen;
+
+import static java.util.stream.Collectors.toSet;
 
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Default;
@@ -39,13 +42,11 @@ import javax.enterprise.inject.InjectionException;
 import javax.enterprise.inject.Produces;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.ObserverMethod;
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
 import javax.enterprise.inject.spi.ProcessBean;
 import javax.enterprise.inject.spi.ProcessInjectionTarget;
@@ -68,6 +69,7 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.PropertyInject;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ServiceStatus;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.management.event.AbstractExchangeEvent;
 import org.apache.camel.model.RouteContainer;
@@ -84,6 +86,7 @@ import static org.apache.camel.cdi.CdiSpiHelper.hasAnnotation;
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
 import static org.apache.camel.cdi.Excluded.EXCLUDED;
+import static org.apache.camel.cdi.ResourceHelper.getResource;
 import static org.apache.camel.cdi.Startup.Literal.STARTUP;
 
 public class CdiCamelExtension implements Extension {
@@ -189,25 +192,20 @@ public class CdiCamelExtension implements Extension {
     }
 
     private void camelFactoryProducers(@Observes ProcessAnnotatedType<CdiCamelFactory> pat, BeanManager manager) {
-        AnnotatedType<CdiCamelFactory> at = pat.getAnnotatedType();
-        Set<AnnotatedMethod<? super CdiCamelFactory>> methods = new HashSet<>();
-        for (AnnotatedMethod<? super CdiCamelFactory> am : pat.getAnnotatedType().getMethods()) {
-            if (!am.isAnnotationPresent(Produces.class)) {
-                continue;
-            }
-            Class<?> type = getRawType(am.getBaseType());
-            if (Endpoint.class.isAssignableFrom(type)
-                || ConsumerTemplate.class.equals(type)
-                || ProducerTemplate.class.equals(type)) {
-                Set<Annotation> qualifiers = getQualifiers(am, manager);
-                producerQualifiers.put(am.getJavaMember(), qualifiers);
-                Set<Annotation> annotations = new HashSet<>(am.getAnnotations());
-                annotations.removeAll(qualifiers);
-                annotations.add(EXCLUDED);
-                methods.add(new AnnotatedMethodDelegate<>(am, annotations));
-            }
-        }
-        pat.setAnnotatedType(new AnnotatedTypeDelegate<>(at, methods));
+        pat.setAnnotatedType(
+            new AnnotatedTypeDelegate<>(
+                pat.getAnnotatedType(), pat.getAnnotatedType().getMethods().stream()
+                .filter(am -> am.isAnnotationPresent(Produces.class))
+                .filter(am -> am.getTypeClosure().stream().anyMatch(isEqual(Endpoint.class)
+                    .or(isEqual(CdiEventEndpoint.class)).or(isEqual(MockEndpoint.class))
+                    .or(isEqual(ConsumerTemplate.class)).or(isEqual(ProducerTemplate.class))))
+                .peek(am -> producerQualifiers.put(am.getJavaMember(), getQualifiers(am, manager)))
+                .map(am -> new AnnotatedMethodDelegate<>(am, am.getAnnotations().stream()
+                    .filter(annotation -> !manager.isQualifier(annotation.annotationType()))
+                    .collect(collectingAndThen(toSet(), annotations -> {
+                        annotations.add(EXCLUDED); return annotations;
+                    }))))
+                .collect(toSet())));
     }
 
     private <T extends EventObject> void camelEventNotifiers(@Observes ProcessObserverMethod<T, ?> pom) {
@@ -215,7 +213,8 @@ public class CdiCamelExtension implements Extension {
         Type type = pom.getObserverMethod().getObservedType();
         // Camel events are raw types
         if (type instanceof Class && Class.class.cast(type).getPackage().equals(AbstractExchangeEvent.class.getPackage())) {
-            eventQualifiers.addAll(pom.getObserverMethod().getObservedQualifiers().isEmpty() ? Collections.singleton(ANY) : pom.getObserverMethod().getObservedQualifiers());
+            eventQualifiers.addAll(pom.getObserverMethod().getObservedQualifiers().isEmpty()
+                ? singleton(ANY) : pom.getObserverMethod().getObservedQualifiers());
         }
     }
 
@@ -255,7 +254,7 @@ public class CdiCamelExtension implements Extension {
                 } catch (Exception cause) {
                     abd.addDefinitionError(
                         new InjectionException(
-                            "Error while importing resource [" + ResourceHelper.getResource(path) + "]", cause));
+                            "Error while importing resource [" + getResource(path) + "]", cause));
                 }
             }
         }
@@ -304,10 +303,10 @@ public class CdiCamelExtension implements Extension {
         // Update the CDI Camel factory beans
         Set<Annotation> endpointQualifiers = cdiEventEndpoints.keySet().stream()
             .flatMap(ip -> ip.getQualifiers().stream())
-            .collect(Collectors.toSet());
+            .collect(toSet());
         Set<Annotation> templateQualifiers = contextQualifiers.stream()
             .filter(isAnnotationType(Default.class).or(isAnnotationType(Named.class)).negate())
-            .collect(Collectors.toSet());
+            .collect(toSet());
         // TODO: would be more correct to add a bean for each Camel context bean
         producerBeans.entrySet().stream()
             .map(producer -> new BeanDelegate<>(producer.getValue(),
@@ -318,9 +317,7 @@ public class CdiCamelExtension implements Extension {
             .forEach(abd::addBean);
 
         // Add CDI event endpoint observer methods
-        for (ObserverMethod method : cdiEventEndpoints.values()) {
-            abd.addObserverMethod(method);
-        }
+        cdiEventEndpoints.values().forEach(abd::addObserverMethod);
     }
 
     private SyntheticBean<?> camelContextBean(BeanManager manager, Annotation... qualifiers) {
@@ -368,10 +365,7 @@ public class CdiCamelExtension implements Extension {
         // the initialization of normal-scoped beans).
         // FIXME: This does not work with OpenWebBeans for bean whose bean type is an
         // interface as the Object methods does not get forwarded to the bean instances!
-        for (AnnotatedType<?> type : eagerBeans) {
-            // Calling toString is necessary to force the initialization of normal-scoped beans
-            getReferencesByType(manager, type.getJavaClass(), ANY).toString();
-        }
+        eagerBeans.forEach(type -> getReferencesByType(manager, type.getJavaClass(), ANY).toString());
         manager.getBeans(Object.class, ANY, STARTUP).stream()
             .forEach(bean -> getReference(manager, bean.getBeanClass(), bean).toString());
 

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
index 86fee57..8196d45 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelFactory.java
@@ -21,11 +21,14 @@ import java.lang.reflect.Field;
 import java.lang.reflect.GenericArrayType;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.Iterator;
+import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.joining;
+
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
 import javax.enterprise.inject.Default;
@@ -44,6 +47,7 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.mock.MockEndpoint;
 
+import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
 
 final class CdiCamelFactory {
@@ -63,12 +67,9 @@ final class CdiCamelFactory {
     @Default @Uri("")
     // Qualifiers are dynamically added in CdiCamelExtension
     private static ProducerTemplate producerTemplate(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
-        Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
-        if (uri != null) {
-            return producerTemplateFromUri(ip, instance, extension, uri);
-        } else {
-            return defaultProducerTemplate(ip, instance, extension);
-        }
+        return getQualifierByType(ip, Uri.class)
+            .map(uri -> producerTemplateFromUri(ip, instance, extension, uri))
+            .orElseGet(() -> defaultProducerTemplate(ip, instance, extension));
     }
 
     private static ProducerTemplate producerTemplateFromUri(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension, Uri uri) {
@@ -111,7 +112,7 @@ final class CdiCamelFactory {
     @Typed(MockEndpoint.class)
     // Qualifiers are dynamically added in CdiCamelExtension
     private static MockEndpoint mockEndpointFromUri(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
-        Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
+        Uri uri = getQualifierByType(ip, Uri.class).get();
         try {
             CamelContext context = uri.context().isEmpty()
                 ? selectContext(ip, instance, extension)
@@ -130,7 +131,7 @@ final class CdiCamelFactory {
     @Typed(MockEndpoint.class)
     // Qualifiers are dynamically added in CdiCamelExtension
     private static MockEndpoint createMockEndpoint(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
-        Mock mock = CdiSpiHelper.getQualifierByType(ip, Mock.class);
+        Mock mock = getQualifierByType(ip, Mock.class).get();
         try {
             CamelContext context = mock.context().isEmpty()
                 ? selectContext(ip, instance, extension)
@@ -145,7 +146,7 @@ final class CdiCamelFactory {
     @Produces
     // Qualifiers are dynamically added in CdiCamelExtension
     private static Endpoint endpoint(InjectionPoint ip, @Any Instance<CamelContext> instance, CdiCamelExtension extension) {
-        Uri uri = CdiSpiHelper.getQualifierByType(ip, Uri.class);
+        Uri uri = getQualifierByType(ip, Uri.class).get();
         try {
             CamelContext context = uri.context().isEmpty()
                 ? selectContext(ip, instance, extension)
@@ -179,7 +180,8 @@ final class CdiCamelFactory {
             }
             context.addEndpoint(uri,
                 new CdiEventEndpoint<>(
-                    event.select(literal, ip.getQualifiers().toArray(new Annotation[ip.getQualifiers().size()])), uri, context, (ForwardingObserverMethod<T>) extension.getObserverMethod(ip)));
+                    event.select(literal, ip.getQualifiers().stream().toArray(Annotation[]::new)),
+                    uri, context, (ForwardingObserverMethod<T>) extension.getObserverMethod(ip)));
         }
         return context.getEndpoint(uri, CdiEventEndpoint.class);
     }
@@ -199,23 +201,14 @@ final class CdiCamelFactory {
         if (qualifiers.isEmpty() && !instance.select(DEFAULT).isUnsatisfied()) {
             return instance.select(DEFAULT).get();
         }
-        return instance.select(qualifiers.toArray(new Annotation[qualifiers.size()])).get();
+        return instance.select(qualifiers.stream().toArray(Annotation[]::new)).get();
     }
 
     private static String eventEndpointUri(Type type, Set<Annotation> qualifiers) {
-        String uri = "cdi-event://" + authorityFromType(type);
-        StringBuilder parameters = new StringBuilder();
-        Iterator<Annotation> it = qualifiers.iterator();
-        while (it.hasNext()) {
-            parameters.append(it.next().annotationType().getCanonicalName());
-            if (it.hasNext()) {
-                parameters.append("%2C");
-            }
-        }
-        if (parameters.length() > 0) {
-            uri += "?qualifiers=" + parameters.toString();
-        }
-        return uri;
+        return "cdi-event://" + authorityFromType(type) + qualifiers.stream()
+            .map(Annotation::annotationType)
+            .map(Class::getCanonicalName)
+            .collect(joining("%2C", qualifiers.size() > 0 ? "?qualifiers=" : "", ""));
     }
 
     private static String authorityFromType(Type type) {
@@ -223,18 +216,9 @@ final class CdiCamelFactory {
             return Class.class.cast(type).getName();
         }
         if (type instanceof ParameterizedType) {
-            ParameterizedType pt = (ParameterizedType) type;
-            StringBuilder builder = new StringBuilder(authorityFromType(pt.getRawType()));
-            Iterator<Type> it = Arrays.asList(pt.getActualTypeArguments()).iterator();
-            builder.append("%3C");
-            while (it.hasNext()) {
-                builder.append(authorityFromType(it.next()));
-                if (it.hasNext()) {
-                    builder.append("%2C");
-                }
-            }
-            builder.append("%3E");
-            return builder.toString();
+            return Stream.of(((ParameterizedType) type).getActualTypeArguments())
+                .map(CdiCamelFactory::authorityFromType)
+                .collect(joining("%2C", "%3C", "%3E"));
         }
         if (type instanceof GenericArrayType) {
             GenericArrayType arrayType = (GenericArrayType) type;
@@ -242,4 +226,11 @@ final class CdiCamelFactory {
         }
         throw new IllegalArgumentException("Cannot create URI authority for event type [" + type + "]");
     }
+
+    private static <T extends Annotation> Optional<T> getQualifierByType(InjectionPoint ip, Class<T> type) {
+        return ip.getQualifiers().stream()
+            .filter(isAnnotationType(type))
+            .findAny()
+            .map(type::cast);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
index d1e8ba9..a658051 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
@@ -20,6 +20,8 @@ import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.camel.spi.Injector;
 
+import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByType;
+
 final class CdiCamelInjector implements Injector {
 
     private final Injector injector;
@@ -33,7 +35,7 @@ final class CdiCamelInjector implements Injector {
 
     @Override
     public <T> T newInstance(Class<T> type) {
-        return BeanManagerHelper.getReferenceByType(manager, type)
+        return getReferenceByType(manager, type)
             .orElseGet(() -> injector.newInstance(type));
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelRegistry.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelRegistry.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelRegistry.java
index 1c49122..9593955 100755
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelRegistry.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelRegistry.java
@@ -16,20 +16,25 @@
  */
 package org.apache.camel.cdi;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import static java.util.stream.Collectors.toMap;
+
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.spi.Registry;
-import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.cdi.AnyLiteral.ANY;
+import static org.apache.camel.cdi.BeanManagerHelper.getReference;
+import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
+import static org.apache.camel.cdi.BeanManagerHelper.getReferencesByType;
+import static org.apache.camel.util.ObjectHelper.notEmpty;
+import static org.apache.camel.util.ObjectHelper.notNull;
 
 /**
  * The {@link Registry} used by Camel to perform lookup into the CDI {@link BeanManager}.
@@ -47,43 +52,37 @@ final class CdiCamelRegistry implements Registry {
 
     @Override
     public Object lookupByName(String name) {
-        ObjectHelper.notEmpty(name, "name");
+        notEmpty(name, "name");
         logger.trace("Looking up bean with name [{}]", name);
         // Work-around for WELD-2089
         if ("properties".equals(name) && findByTypeWithName(PropertiesComponent.class).containsKey("properties")) {
-            return BeanManagerHelper.getReferenceByName(manager, name, PropertiesComponent.class)
-                .orElse(null);
+            return getReferenceByName(manager, name, PropertiesComponent.class).orElse(null);
         }
-        return BeanManagerHelper.getReferenceByName(manager, name, Object.class)
-            .orElse(null);
+        return getReferenceByName(manager, name, Object.class).orElse(null);
     }
 
     @Override
     public <T> T lookupByNameAndType(String name, Class<T> type) {
-        ObjectHelper.notEmpty(name, "name");
-        ObjectHelper.notNull(type, "type");
+        notEmpty(name, "name");
+        notNull(type, "type");
         logger.trace("Looking up bean with name [{}] of type [{}]", name, type);
-        return BeanManagerHelper.getReferenceByName(manager, name, type).orElse(null);
+        return getReferenceByName(manager, name, type).orElse(null);
     }
 
     @Override
     public <T> Map<String, T> findByTypeWithName(Class<T> type) {
-        ObjectHelper.notNull(type, "type");
+        notNull(type, "type");
         logger.trace("Looking up named beans of type [{}]", type);
-        Map<String, T> references = new HashMap<>();
-        for (Bean<?> bean : manager.getBeans(type, ANY)) {
-            if (bean.getName() != null) {
-                references.put(bean.getName(), BeanManagerHelper.getReference(manager, type, bean));
-            }
-        }
-        return references;
+        return manager.getBeans(type, ANY).stream()
+            .filter(bean -> bean.getName() != null)
+            .collect(toMap(Bean::getName, bean -> getReference(manager, type, bean)));
     }
 
     @Override
     public <T> Set<T> findByType(Class<T> type) {
-        ObjectHelper.notNull(type, "type");
+        notNull(type, "type");
         logger.trace("Looking up beans of type [{}]", type);
-        return BeanManagerHelper.getReferencesByType(manager, type, ANY);
+        return getReferencesByType(manager, type, ANY);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
index 8abd50f..33530b7 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
@@ -25,16 +25,20 @@ import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.lang.reflect.WildcardType;
-import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 import java.util.StringJoiner;
 import java.util.function.Predicate;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
+
+import static java.security.AccessController.doPrivileged;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toSet;
+
 import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
@@ -42,9 +46,6 @@ import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionPoint;
-
-import org.apache.camel.util.ObjectHelper;
 
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
@@ -55,21 +56,8 @@ final class CdiSpiHelper {
     private CdiSpiHelper() {
     }
 
-    static <T extends Annotation> T getQualifierByType(InjectionPoint ip, Class<T> type) {
-        return getFirstElementOfType(ip.getQualifiers(), type);
-    }
-
-    static <E, T extends E> T getFirstElementOfType(Collection<E> collection, Class<T> type) {
-        for (E item : collection) {
-            if ((item != null) && type.isAssignableFrom(item.getClass())) {
-                return ObjectHelper.cast(type, item);
-            }
-        }
-        return null;
-    }
-
     static Predicate<Annotation> isAnnotationType(Class<? extends Annotation> clazz) {
-        Objects.requireNonNull(clazz);
+        requireNonNull(clazz);
         return annotation -> clazz.equals(annotation.annotationType());
     }
 
@@ -101,12 +89,10 @@ final class CdiSpiHelper {
 
     @SafeVarargs
     static boolean hasAnnotation(AnnotatedType<?> type, Class<? extends Annotation>... annotations) {
-        for (Class<? extends Annotation> annotation : annotations) {
-            if (hasAnnotation(type, annotation)) {
-                return true;
-            }
-        }
-        return false;
+        return Stream.of(annotations)
+            .filter(annotation -> hasAnnotation(type, annotation))
+            .findAny()
+            .isPresent();
     }
 
     static boolean hasAnnotation(AnnotatedType<?> type, Class<? extends Annotation> annotation) {
@@ -132,17 +118,17 @@ final class CdiSpiHelper {
     }
 
     static Set<Annotation> getQualifiers(Annotated annotated, BeanManager manager) {
-        Set<Annotation> qualifiers = new HashSet<>();
-        for (Annotation annotation : annotated.getAnnotations()) {
-            if (manager.isQualifier(annotation.annotationType())) {
-                qualifiers.add(annotation);
-            }
-        }
-        if (qualifiers.isEmpty()) {
-            qualifiers.add(DEFAULT);
-        }
-        qualifiers.add(ANY);
-        return qualifiers;
+        return annotated.getAnnotations().stream()
+            .filter(annotation -> manager.isQualifier(annotation.annotationType()))
+            .collect(collectingAndThen(toSet(),
+                qualifiers -> {
+                    if (qualifiers.isEmpty()) {
+                        qualifiers.add(DEFAULT);
+                    }
+                    qualifiers.add(ANY);
+                    return qualifiers;
+                })
+            );
     }
 
     /**
@@ -153,8 +139,8 @@ final class CdiSpiHelper {
             bean.getScope().getName(),
             createAnnotationCollectionId(bean.getQualifiers()),
             createTypeCollectionId(bean.getTypes()))
-            .filter(s -> s != null)
-            .collect(Collectors.joining(","));
+            .filter(Objects::nonNull)
+            .collect(joining(","));
     }
 
     /**
@@ -164,7 +150,7 @@ final class CdiSpiHelper {
         return types.stream()
             .sorted((t1, t2) -> createTypeId(t1).compareTo(createTypeId(t2)))
             .map(CdiSpiHelper::createTypeId)
-            .collect(Collectors.joining(",", "[", "]"));
+            .collect(joining(",", "[", "]"));
     }
 
     /**
@@ -179,7 +165,7 @@ final class CdiSpiHelper {
             return createTypeId(((ParameterizedType) type).getRawType())
                 + Stream.of(((ParameterizedType) type).getActualTypeArguments())
                 .map(CdiSpiHelper::createTypeId)
-                .collect(Collectors.joining(",", "<", ">"));
+                .collect(joining(",", "<", ">"));
         }
 
         if (type instanceof TypeVariable<?>) {
@@ -204,14 +190,14 @@ final class CdiSpiHelper {
         return annotations.stream()
             .sorted((a1, a2) -> a1.annotationType().getName().compareTo(a2.annotationType().getName()))
             .map(CdiSpiHelper::createAnnotationId)
-            .collect(Collectors.joining(",", "[", "]"));
+            .collect(joining(",", "[", "]"));
     }
 
     /**
      * Generates a unique signature for an {@link Annotation}.
      */
     private static String createAnnotationId(Annotation annotation) {
-        Method[] methods = AccessController.doPrivileged(
+        Method[] methods = doPrivileged(
             (PrivilegedAction<Method[]>) () -> annotation.annotationType().getDeclaredMethods());
 
         return Stream.of(methods)

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
index 3f2b565..b0f8a32 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
@@ -26,9 +26,8 @@ import javax.enterprise.inject.spi.ObserverMethod;
 
 import org.apache.camel.CamelContext;
 
-/* package-private */ final class ForwardingObserverMethod<T> implements ObserverMethod<T> {
+final class ForwardingObserverMethod<T> implements ObserverMethod<T> {
 
-    // Should be replaced with the Java 8 functional interface Consumer<T>
     private final AtomicReference<CdiEventEndpoint<T>> observer = new AtomicReference<>();
 
     private final Type type;

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
index 380573b..9b58aa3 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
@@ -16,9 +16,12 @@
  */
 package org.apache.camel.cdi;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toMap;
+
 import javax.enterprise.inject.UnsatisfiedResolutionException;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
@@ -27,11 +30,13 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.main.MainSupport;
 import org.apache.deltaspike.cdise.api.CdiContainer;
-import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.cdi.AnyLiteral.ANY;
+import static org.apache.camel.cdi.BeanManagerHelper.getReference;
+import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByType;
+import static org.apache.deltaspike.cdise.api.CdiContainerLoader.getCdiContainer;
 
 /**
  * Camel CDI boot integration. Allows Camel and CDI to be booted up on the command line as a JVM process.
@@ -70,30 +75,25 @@ public class Main extends MainSupport {
 
     @Override
     protected ProducerTemplate findOrCreateCamelTemplate() {
-        BeanManager manager = cdiContainer.getBeanManager();
-        Bean<?> bean = manager.resolve(manager.getBeans(CamelContext.class));
-        if (bean == null) {
-            throw new UnsatisfiedResolutionException("No default Camel context is deployed, cannot create default ProducerTemplate!");
-        }
-        CamelContext context = (CamelContext) manager.getReference(bean, CamelContext.class, manager.createCreationalContext(bean));
-        return context.createProducerTemplate();
+        return getReferenceByType(cdiContainer.getBeanManager(), CamelContext.class)
+            .orElseThrow(
+                () -> new UnsatisfiedResolutionException("No default Camel context is deployed, "
+                    + "cannot create default ProducerTemplate!"))
+            .createProducerTemplate();
     }
 
     @Override
     protected Map<String, CamelContext> getCamelContextMap() {
         BeanManager manager = cdiContainer.getBeanManager();
-        Map<String, CamelContext> answer = new HashMap<>();
-        for (Bean<?> bean : manager.getBeans(CamelContext.class, ANY)) {
-            CamelContext context = (CamelContext) manager.getReference(bean, CamelContext.class, manager.createCreationalContext(bean));
-            answer.put(context.getName(), context);
-        }
-        return answer;
+        return manager.getBeans(CamelContext.class, ANY).stream()
+            .map(bean -> getReference(manager, CamelContext.class, bean))
+            .collect(toMap(CamelContext::getName, identity()));
     }
 
     @Override
     protected void doStart() throws Exception {
         // TODO: Use standard CDI Java SE support when CDI 2.0 becomes a prerequisite
-        CdiContainer container = CdiContainerLoader.getCdiContainer();
+        CdiContainer container = getCdiContainer();
         container.boot();
         container.getContextControl().startContexts();
         cdiContainer = container;
@@ -106,7 +106,7 @@ public class Main extends MainSupport {
         BeanManager manager = cdiContainer.getBeanManager();
         Set<Bean<?>> contexts = manager.getBeans(CamelContext.class);
         // Warn if the default CDI Camel context has no routes
-        if (contexts.size() == 1 && BeanManagerHelper.getReference(manager, CamelContext.class, contexts.iterator().next()).getRoutes().isEmpty()) {
+        if (contexts.size() == 1 && getReference(manager, CamelContext.class, contexts.iterator().next()).getRoutes().isEmpty()) {
             LOG.warn("Camel CDI main has started with no Camel routes! "
                    + "You may add some RouteBuilder beans to your project.");
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
index 1c7f00a..679a8b8 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
@@ -18,11 +18,13 @@ package org.apache.camel.cdi;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.unmodifiableSet;
+
 import javax.enterprise.inject.spi.Annotated;
 
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
@@ -37,7 +39,7 @@ final class SyntheticAnnotated implements Annotated {
     private final Set<Annotation> annotations;
 
     SyntheticAnnotated(Class<?> type, Set<Type> types, Annotation... annotations) {
-        this(type, types, Arrays.asList(annotations));
+        this(type, types, asList(annotations));
     }
 
     SyntheticAnnotated(Class<?> type, Set<Type> types, Collection<Annotation> annotations) {
@@ -57,12 +59,12 @@ final class SyntheticAnnotated implements Annotated {
 
     @Override
     public Set<Type> getTypeClosure() {
-        return Collections.unmodifiableSet(types);
+        return unmodifiableSet(types);
     }
 
     @Override
     public Set<Annotation> getAnnotations() {
-        return Collections.unmodifiableSet(annotations);
+        return unmodifiableSet(annotations);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
index e6f407c..6303b37 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
@@ -18,9 +18,11 @@ package org.apache.camel.cdi;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
-import java.util.Collections;
 import java.util.Set;
-import java.util.stream.Collectors;
+
+import static java.util.Collections.emptySet;
+import static java.util.stream.Collectors.toSet;
+
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Named;
@@ -53,7 +55,7 @@ class SyntheticBeanAttributes<T> {
     public Set<Annotation> getQualifiers() {
         return annotated.getAnnotations().stream()
             .filter(a -> manager.isQualifier(a.annotationType()))
-            .collect(Collectors.toSet());
+            .collect(toSet());
     }
 
     public String getName() {
@@ -66,7 +68,7 @@ class SyntheticBeanAttributes<T> {
     }
 
     public Set<Class<? extends Annotation>> getStereotypes() {
-        return Collections.emptySet();
+        return emptySet();
     }
 
     public Set<Type> getTypes() {

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
index 51f2b68..d496d58 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
@@ -21,15 +21,18 @@ import java.io.InputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.net.URL;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static java.lang.String.format;
+import static java.util.Collections.addAll;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.singleton;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.toSet;
 
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.spi.Bean;
@@ -51,14 +54,15 @@ import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.ApplicationScopedLiteral.APPLICATION_SCOPED;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
+import static org.apache.camel.cdi.ResourceHelper.getResource;
 import static org.apache.camel.cdi.Startup.Literal.STARTUP;
+import static org.apache.camel.util.ObjectHelper.isEmpty;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
 
 final class XmlCdiBeanFactory {
@@ -82,10 +86,10 @@ final class XmlCdiBeanFactory {
     }
 
     Set<SyntheticBean<?>> beansFrom(String path) throws JAXBException, IOException {
-        URL url = ResourceHelper.getResource(path);
+        URL url = getResource(path);
         if (url == null) {
             logger.warn("Unable to locate resource [{}] for import!", path);
-            return Collections.emptySet();
+            return emptySet();
         }
         return beansFrom(url);
     }
@@ -97,7 +101,7 @@ final class XmlCdiBeanFactory {
                 .unmarshal(xml);
             if (node instanceof RoutesDefinition) {
                 RoutesDefinition routes = (RoutesDefinition) node;
-                return Collections.singleton(routesDefinitionBean(routes, url));
+                return singleton(routesDefinitionBean(routes, url));
             } else if (node instanceof ApplicationContextFactoryBean) {
                 ApplicationContextFactoryBean app = (ApplicationContextFactoryBean) node;
                 Set<SyntheticBean<?>> beans = new HashSet<>();
@@ -136,20 +140,20 @@ final class XmlCdiBeanFactory {
                 return beans;
             } else if (node instanceof RestContextDefinition) {
                 RestContextDefinition factory = (RestContextDefinition) node;
-                return Collections.singleton(restContextBean(factory, url));
+                return singleton(restContextBean(factory, url));
             } else if (node instanceof RouteContextDefinition) {
                 RouteContextDefinition factory = (RouteContextDefinition) node;
-                return Collections.singleton(routeContextBean(factory, url));
+                return singleton(routeContextBean(factory, url));
             }
         }
-        return Collections.emptySet();
+        return emptySet();
     }
 
     private SyntheticBean<?> camelContextBean(CamelContextFactoryBean factory, URL url) {
         Set<Annotation> annotations = new HashSet<>();
         annotations.add(ANY);
         if (factory.getId() != null) {
-            Collections.addAll(annotations,
+            addAll(annotations,
                 ContextName.Literal.of(factory.getId()), NamedLiteral.of(factory.getId()));
         } else {
             annotations.add(DEFAULT);
@@ -260,7 +264,7 @@ final class XmlCdiBeanFactory {
     }
 
     private SyntheticBean<?> proxyFactoryBean(Bean<?> context, CamelProxyFactoryDefinition proxy, URL url) {
-        if (ObjectHelper.isEmpty(proxy.getServiceRef()) && ObjectHelper.isEmpty(proxy.getServiceUrl())) {
+        if (isEmpty(proxy.getServiceRef()) && isEmpty(proxy.getServiceUrl())) {
             throw new CreationException(
                 format("Missing [%s] or [%s] attribute for imported bean [%s] from resource [%s]",
                     "serviceRef", "serviceUrl", proxy.getId(), url));
@@ -279,7 +283,7 @@ final class XmlCdiBeanFactory {
 
     private SyntheticBean<?> serviceExporterBean(Bean<?> context, CamelServiceExporterDefinition exporter, URL url) {
         // TODO: replace with CreationException
-        Objects.requireNonNull(exporter.getServiceRef(),
+        requireNonNull(exporter.getServiceRef(),
             () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]",
                 "serviceRef", Objects.toString(exporter.getId(), "export"), url));
 
@@ -291,7 +295,7 @@ final class XmlCdiBeanFactory {
             if (bean != null) {
                 type = bean.getBeanClass();
             } else {
-                Objects.requireNonNull(exporter.getServiceInterface(),
+                requireNonNull(exporter.getServiceInterface(),
                     () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]",
                         "serviceInterface", Objects.toString(exporter.getId(), "export"), url));
                 type = exporter.getServiceInterface();
@@ -315,14 +319,14 @@ final class XmlCdiBeanFactory {
     }
 
     private SyntheticBean<?> restContextBean(RestContextDefinition definition, URL url) {
-        Objects.requireNonNull(definition.getId(),
+        requireNonNull(definition.getId(),
             () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]",
                 "id", "restContext", url));
 
         return new SyntheticBean<>(manager,
             new SyntheticAnnotated(List.class,
                 Stream.of(List.class, new ListParameterizedType(RestDefinition.class))
-                    .collect(Collectors.toSet()),
+                    .collect(toSet()),
                 ANY, NamedLiteral.of(definition.getId())),
             List.class,
             new SyntheticInjectionTarget<>(definition::getRests), bean ->
@@ -333,14 +337,14 @@ final class XmlCdiBeanFactory {
     }
 
     private SyntheticBean<?> routeContextBean(RouteContextDefinition definition, URL url) {
-        Objects.requireNonNull(definition.getId(),
+        requireNonNull(definition.getId(),
             () -> format("Missing [%s] attribute for imported bean [%s] from resource [%s]",
                 "id", "routeContext", url));
 
         return new SyntheticBean<>(manager,
             new SyntheticAnnotated(List.class,
                 Stream.of(List.class, new ListParameterizedType(RouteDefinition.class))
-                    .collect(Collectors.toSet()),
+                    .collect(toSet()),
                 ANY, NamedLiteral.of(definition.getId())),
             List.class,
             new SyntheticInjectionTarget<>(definition::getRoutes), bean ->

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
index 9966030..f88f7b6 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
@@ -18,6 +18,7 @@ package org.apache.camel.cdi;
 
 import java.util.function.Function;
 
+import static java.lang.String.format;
 import static java.util.Objects.nonNull;
 
 import javax.enterprise.context.spi.CreationalContext;
@@ -96,7 +97,7 @@ final class XmlErrorHandlerFactoryBean extends SyntheticBean<ErrorHandlerBuilder
         if (isNotEmpty(handler.getOnExceptionOccurredRef())) {
             Processor processor = getReferenceByName(manager, handler.getOnExceptionOccurredRef(), Processor.class)
                 .orElseThrow(() -> new UnsatisfiedResolutionException(
-                    String.format("No bean with name [%s] to satisfy attribute [%s]",
+                    format("No bean with name [%s] to satisfy attribute [%s]",
                         handler.getOnPrepareFailureRef(), "onExceptionOccurredRef")));
             builder.setOnExceptionOccurred(processor);
         }
@@ -104,7 +105,7 @@ final class XmlErrorHandlerFactoryBean extends SyntheticBean<ErrorHandlerBuilder
         if (isNotEmpty(handler.getOnPrepareFailureRef())) {
             Processor processor = getReferenceByName(manager, handler.getOnPrepareFailureRef(), Processor.class)
                 .orElseThrow(() -> new UnsatisfiedResolutionException(
-                    String.format("No bean with name [%s] to satisfy attribute [%s]",
+                    format("No bean with name [%s] to satisfy attribute [%s]",
                         handler.getOnPrepareFailureRef(), "onPrepareFailureRef")));
             builder.setOnPrepareFailure(processor);
         }
@@ -112,7 +113,7 @@ final class XmlErrorHandlerFactoryBean extends SyntheticBean<ErrorHandlerBuilder
         if (isNotEmpty(handler.getOnRedeliveryRef())) {
             Processor processor = getReferenceByName(manager, handler.getOnRedeliveryRef(), Processor.class)
                 .orElseThrow(() -> new UnsatisfiedResolutionException(
-                    String.format("No bean with name [%s] to satisfy attribute [%s]",
+                    format("No bean with name [%s] to satisfy attribute [%s]",
                         handler.getOnPrepareFailureRef(), "onRedeliveryRef")));
             builder.setOnRedelivery(processor);
         }
@@ -126,7 +127,7 @@ final class XmlErrorHandlerFactoryBean extends SyntheticBean<ErrorHandlerBuilder
         if (isNotEmpty(handler.getRedeliveryPolicyRef())) {
             RedeliveryPolicy policy = getReferenceByName(manager, handler.getRedeliveryPolicyRef(), RedeliveryPolicy.class)
                 .orElseThrow(() -> new UnsatisfiedResolutionException(
-                    String.format("No bean with name [%s] to satisfy attribute [%s]",
+                    format("No bean with name [%s] to satisfy attribute [%s]",
                         handler.getRedeliveryPolicyRef(), "redeliveryPolicyRef")));
             builder.setRedeliveryPolicy(policy);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlFactoryBeanInjectionTarget.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlFactoryBeanInjectionTarget.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlFactoryBeanInjectionTarget.java
index 234b653..b9df796 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlFactoryBeanInjectionTarget.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlFactoryBeanInjectionTarget.java
@@ -23,9 +23,9 @@ import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.core.xml.AbstractCamelFactoryBean;
-import org.apache.camel.util.ObjectHelper;
 
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
+import static org.apache.camel.util.ObjectHelper.isEmpty;
 
 final class XmlFactoryBeanInjectionTarget<T> extends SyntheticInjectionTarget<T> {
 
@@ -33,7 +33,7 @@ final class XmlFactoryBeanInjectionTarget<T> extends SyntheticInjectionTarget<T>
         super(
             () -> {
                 try {
-                    if (ObjectHelper.isEmpty(factory.getCamelContextId()) && context != null) {
+                    if (isEmpty(factory.getCamelContextId()) && context != null) {
                         factory.setCamelContext(getReference(manager, CamelContext.class, context));
                     }
                     factory.afterPropertiesSet();

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlProxyFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlProxyFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlProxyFactoryBean.java
index bb93451..e969f4c 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlProxyFactoryBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlProxyFactoryBean.java
@@ -28,14 +28,13 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.Producer;
-import org.apache.camel.component.bean.ProxyHelper;
 import org.apache.camel.core.xml.CamelProxyFactoryDefinition;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.ServiceHelper;
 
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
 import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
+import static org.apache.camel.component.bean.ProxyHelper.createProxy;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
+import static org.apache.camel.util.ServiceHelper.startService;
 
 final class XmlProxyFactoryBean<T> extends SyntheticBean<T> {
 
@@ -60,10 +59,10 @@ final class XmlProxyFactoryBean<T> extends SyntheticBean<T> {
                 : getReference(manager, CamelContext.class, this.context);
 
             Endpoint endpoint;
-            if (ObjectHelper.isNotEmpty(proxy.getServiceRef())) {
+            if (isNotEmpty(proxy.getServiceRef())) {
                 endpoint = context.getRegistry().lookupByNameAndType(proxy.getServiceRef(), Endpoint.class);
             } else {
-                if (ObjectHelper.isNotEmpty(proxy.getServiceUrl())) {
+                if (isNotEmpty(proxy.getServiceUrl())) {
                     endpoint = context.getEndpoint(proxy.getServiceUrl());
                 } else {
                     throw new IllegalStateException("serviceUrl or serviceRef must not be empty!");
@@ -72,7 +71,7 @@ final class XmlProxyFactoryBean<T> extends SyntheticBean<T> {
 
             if (endpoint == null) {
                 throw new UnsatisfiedResolutionException("Could not resolve endpoint: "
-                    + (ObjectHelper.isNotEmpty(proxy.getServiceRef())
+                    + (isNotEmpty(proxy.getServiceRef())
                     ? proxy.getServiceRef()
                     : proxy.getServiceUrl()));
             }
@@ -82,11 +81,11 @@ final class XmlProxyFactoryBean<T> extends SyntheticBean<T> {
 
             try {
                 // Start the endpoint before we create the producer
-                ServiceHelper.startService(endpoint);
+                startService(endpoint);
                 Producer producer = endpoint.createProducer();
                 // Add and start the producer
                 context.addService(producer, true, true);
-                return ProxyHelper.createProxy(endpoint, bind, producer, (Class<T>) proxy.getServiceInterface());
+                return createProxy(endpoint, bind, producer, (Class<T>) proxy.getServiceInterface());
             } catch (Exception cause) {
                 throw new FailedToCreateProducerException(endpoint, cause);
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlServiceExporterBean.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlServiceExporterBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlServiceExporterBean.java
index cc35dc4..e1fc896 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlServiceExporterBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlServiceExporterBean.java
@@ -30,12 +30,12 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.FailedToCreateConsumerException;
 import org.apache.camel.component.bean.BeanProcessor;
 import org.apache.camel.core.xml.CamelServiceExporterDefinition;
-import org.apache.camel.util.ServiceHelper;
 
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
 import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
 import static org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
+import static org.apache.camel.util.ServiceHelper.startService;
 
 final class XmlServiceExporterBean<T> extends SyntheticBean<T> {
 
@@ -73,7 +73,7 @@ final class XmlServiceExporterBean<T> extends SyntheticBean<T> {
             Endpoint endpoint = getMandatoryEndpoint(context, exporter.getUri());
             try {
                 // need to start endpoint before we create consumer
-                ServiceHelper.startService(endpoint);
+                startService(endpoint);
                 Consumer consumer = endpoint.createConsumer(new BeanProcessor(service, context));
                 // add and start consumer
                 context.addService(consumer, true, true);

http://git-wip-us.apache.org/repos/asf/camel/blob/86bb7d54/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/ExpectedDeploymentException.java
----------------------------------------------------------------------
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/ExpectedDeploymentException.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/ExpectedDeploymentException.java
index 3f2769a..08ead49 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/ExpectedDeploymentException.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/ExpectedDeploymentException.java
@@ -44,28 +44,23 @@ public final class ExpectedDeploymentException implements TestRule {
     private ExpectedDeploymentException() {
         chain = RuleChain
             .outerRule(log)
-            .around(new TestRule() {
+            .around((base, description) -> new Statement() {
                 @Override
-                public Statement apply(final Statement base, Description description) {
-                    return new Statement() {
-                        @Override
-                        public void evaluate() throws Throwable {
-                            try {
-                                base.evaluate();
-                            } catch (Throwable exception) {
-                                assertThat(exception, allOf(pecs(exceptions)));
-                                try {
-                                    // OpenWebBeans logs the deployment exception details
-                                    // TODO: OpenWebBeans only log the root cause of exception thrown in producer methods
-                                    //assertThat(log.getMessages(), containsInRelativeOrder(pecs(messages)))
-                                    assertThat(log.getMessages(), anyOf(hasItems(messages)));
-                                } catch (AssertionError error) {
-                                    // Weld stores the deployment exception details in the exception message
-                                    assertThat(exception.getMessage(), allOf(pecs(messages)));
-                                }
-                            }
+                public void evaluate() throws Throwable {
+                    try {
+                        base.evaluate();
+                    } catch (Throwable exception) {
+                        assertThat(exception, allOf(pecs(exceptions)));
+                        try {
+                            // OpenWebBeans logs the deployment exception details
+                            // TODO: OpenWebBeans only log the root cause of exception thrown in producer methods
+                            //assertThat(log.getMessages(), containsInRelativeOrder(pecs(messages)))
+                            assertThat(log.getMessages(), anyOf(hasItems(messages)));
+                        } catch (AssertionError error) {
+                            // Weld stores the deployment exception details in the exception message
+                            assertThat(exception.getMessage(), allOf(pecs(messages)));
                         }
-                    };
+                    }
                 }
             });
     }