You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Kent Fung (Jira)" <ji...@apache.org> on 2020/09/01 11:25:00 UTC

[jira] [Created] (CAMEL-15493) Camel-Cdi throws NPE when attempting to inject an array property using Microprofile Config

Kent Fung created CAMEL-15493:
---------------------------------

             Summary: Camel-Cdi throws NPE when attempting to inject an array property using Microprofile Config
                 Key: CAMEL-15493
                 URL: https://issues.apache.org/jira/browse/CAMEL-15493
             Project: Camel
          Issue Type: Bug
          Components: camel-cdi
    Affects Versions: 3.4.3
         Environment: JDK 1.8, Tomee 8.0.4 microprofile
            Reporter: Kent Fung


Microprofile Configuration supports CDI injection of properties as lists or arrays and can cause the Camel Cdi extension to throw a NPE during container startup:

 
{noformat}
Caused by: org.apache.webbeans.exception.WebBeansException: java.lang.NullPointerException
 at org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:371)
 at org.apache.webbeans.event.NotificationManager.invokeObserverMethod(NotificationManager.java:819)
 at org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:715)
 ... 53 more
 Caused by: java.lang.NullPointerException
 at org.apache.camel.cdi.CdiCamelExtension.lambda$shouldDeployDefaultCamelContext$9(CdiCamelExtension.java:320)
 at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
 at java.util.HashMap$KeySpliterator.tryAdvance(HashMap.java:1569)
 at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
 at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
 at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
 at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
 at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
 at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
 at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
 at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:449)
 at org.apache.camel.cdi.CdiCamelExtension.shouldDeployDefaultCamelContext(CdiCamelExtension.java:325)
 at org.apache.camel.cdi.CdiCamelExtension.afterBeanDiscovery(CdiCamelExtension.java:276)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.webbeans.event.ObserverMethodImpl.invoke(ObserverMethodImpl.java:404)
 at org.apache.webbeans.event.ContainerEventObserverMethodImpl.invoke(ContainerEventObserverMethodImpl.java:85)
 at org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:365)
 ... 55 more{noformat}
 

This occurs when CdiCamelExtension.shouldDeployDefaultCamelContext encounters a bean for an array type because the Class.getPackage method returns null for arrays:
{code:java}
private boolean shouldDeployDefaultCamelContext(Set<Bean<?>> beans) {

 return beans.stream()
 // Is there a Camel bean with the @Default qualifier?
 // Excluding internal components...
 .filter(bean -> !bean.getBeanClass().getPackage().equals(getClass().getPackage()))
{code}
 

Switching around the equals check should fix it.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)