This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push: new 682174e Fix potential NPE 682174e is described below commit 682174eb44ac8ea45c3a30b79b849ee0654e268a Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Sat Jun 20 22:46:42 2020 +0200 Fix potential NPE --- .../camel/quarkus/core/RuntimeBeanRepository.java | 67 ++++++++++++---------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java index 3e052bd..9db54a3 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RuntimeBeanRepository.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.core; import java.lang.annotation.Annotation; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -31,37 +32,10 @@ import io.quarkus.arc.ArcContainer; import org.apache.camel.spi.BeanRepository; public final class RuntimeBeanRepository implements BeanRepository { - @Override - public Object lookupByName(String name) { - return lookupByNameAndType(name, Object.class); - } - - @Override - public <T> T lookupByNameAndType(String name, Class<T> type) { - final ArcContainer container = Arc.container(); - final BeanManager manager = container.beanManager(); - - return getReferenceByName(manager, name, type).orElse(null); - } - - @Override - public <T> Map<String, T> findByTypeWithName(Class<T> type) { - return getReferencesByTypeWithName(type); - } - - @Override - public <T> Set<T> findByType(Class<T> type) { - final ArcContainer container = Arc.container(); - final BeanManager manager = container.beanManager(); - - return getReferencesByType(manager, type); - } - private static <T> Map<String, T> getReferencesByTypeWithName(Class<T> type, Annotation... qualifiers) { - final ArcContainer container = Arc.container(); - final BeanManager manager = container.beanManager(); - - return getReferencesByTypeWithName(manager, type, qualifiers); + return getBeanManager() + .map(manager -> getReferencesByTypeWithName(manager, type, qualifiers)) + .orElseGet(Collections::emptyMap); } private static <T> Set<T> getReferencesByType(BeanManager manager, Class<T> type, Annotation... qualifiers) { @@ -98,4 +72,37 @@ public final class RuntimeBeanRepository implements BeanRepository { return answer; } + + private static Optional<BeanManager> getBeanManager() { + ArcContainer container = Arc.container(); + if (container == null) { + return Optional.empty(); + } + + return Optional.ofNullable(container.beanManager()); + } + + @Override + public Object lookupByName(String name) { + return lookupByNameAndType(name, Object.class); + } + + @Override + public <T> T lookupByNameAndType(String name, Class<T> type) { + return getBeanManager() + .flatMap(manager -> getReferenceByName(manager, name, type)) + .orElse(null); + } + + @Override + public <T> Map<String, T> findByTypeWithName(Class<T> type) { + return getReferencesByTypeWithName(type); + } + + @Override + public <T> Set<T> findByType(Class<T> type) { + return getBeanManager() + .map(manager -> getReferencesByType(manager, type)) + .orElseGet(Collections::emptySet); + } }