[ https://issues.apache.org/jira/browse/OWB-1441?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Andraschko updated OWB-1441: ----------------------------------- Fix Version/s: 4.0.3 > Adding a User-defined Interceptor Bean via CDI Extension fails due to missing > no-arg constructor > ------------------------------------------------------------------------------------------------ > > Key: OWB-1441 > URL: https://issues.apache.org/jira/browse/OWB-1441 > Project: OpenWebBeans > Issue Type: Bug > Affects Versions: 4.0.2 > Reporter: Richard Zowalla > Assignee: Richard Zowalla > Priority: Major > Fix For: 4.0.3 > > Attachments: OWB-1441.patch > > > Given the following CDI extension: > [https://github.com/smallrye/smallrye-opentelemetry/blob/main/implementation/cdi/src/main/java/io/smallrye/opentelemetry/implementation/cdi/OpenTelemetryExtension.java#L34] > OWB will fail with the following stacktrace: > > {code:java} > Caused by: org.apache.webbeans.exception.WebBeansConfigurationException: > Error while sending SystemEvent to a CDI Extension! > org.apache.webbeans.portable.events.discovery.AfterBeanDiscoveryImpl@576e2324 > at > org.apache.webbeans.event.NotificationManager.onWebBeansException(NotificationManager.java:1079) > at > org.apache.webbeans.event.NotificationManager.doFireSync(NotificationManager.java:1026) > at > org.apache.webbeans.event.NotificationManager.doFireEvent(NotificationManager.java:952) > at > org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:928) > at > org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:505) > at > org.apache.webbeans.container.BeanManagerImpl.fireLifecycleEvent(BeanManagerImpl.java:500) > at > org.apache.webbeans.config.BeansDeployer.fireAfterBeanDiscoveryEvent(BeansDeployer.java:885) > at > org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:315) > at > org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:196) > ... 69 more > Caused by: org.apache.webbeans.exception.WebBeansException: > org.apache.webbeans.exception.WebBeansCreationException: No default > constructor for > io.smallrye.opentelemetry.implementation.cdi.WithSpanInterceptorBean > at > org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:377) > at > org.apache.webbeans.event.NotificationManager.invokeObserverMethod(NotificationManager.java:1146) > at > org.apache.webbeans.event.NotificationManager.doFireSync(NotificationManager.java:1009) > ... 76 more > Caused by: org.apache.webbeans.exception.WebBeansCreationException: No > default constructor for > io.smallrye.opentelemetry.implementation.cdi.WithSpanInterceptorBean > at > org.apache.webbeans.portable.InjectionTargetImpl.createConstructor(InjectionTargetImpl.java:398) > at > org.apache.webbeans.portable.InjectionTargetImpl.getConstructor(InjectionTargetImpl.java:375) > at > org.apache.webbeans.portable.InjectionTargetImpl.defineLifecycleInterceptors(InjectionTargetImpl.java:144) > at > org.apache.webbeans.portable.AbstractProducer.defineInterceptorStack(AbstractProducer.java:95) > at > org.apache.webbeans.util.WebBeansUtil.defineManagedBeanWithoutFireEvents(WebBeansUtil.java:1193) > at > org.apache.webbeans.portable.events.discovery.AfterBeanDiscoveryImpl.addBean(AfterBeanDiscoveryImpl.java:116) > at > io.smallrye.opentelemetry.implementation.cdi.OpenTelemetryExtension.afterBeanDiscovery(OpenTelemetryExtension.java:34) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.base/java.lang.reflect.Method.invoke(Method.java:568) > at > org.apache.webbeans.event.ObserverMethodImpl.invoke(ObserverMethodImpl.java:410) > at > org.apache.webbeans.event.ContainerEventObserverMethodImpl.invoke(ContainerEventObserverMethodImpl.java:86) > at > org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:371) > ... 78 more {code} > The extension dynamically adds a bean via addBean(myCustomBean) and > subsequently fails with the stacktrace above. > There is some more detail in the Slack discussion with [~rmannibucau] : > [https://the-asf.slack.com/archives/C9QU5UHC5/p1717531645315229?thread_ts=1717529714.645939&cid=C9QU5UHC5] > According to his analysis, it seems, that > * "when a custom bean is passed we should use it at runtime, here we just > use another one and rely on the original bean as static specs." > * "we should never replace an user Bean impl by an owb ManagedBean" > * "this is why we end in producer being an interceptor friendly producer > (injection target impl). if we respect user bean contract it will not happen" > Relevant Code: > [https://github.com/apache/openwebbeans/blob/main/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java#L116 > > |https://github.com/apache/openwebbeans/blob/main/webbeans-impl/src/main/java/org/apache/webbeans/portable/events/discovery/AfterBeanDiscoveryImpl.java#L116] > [~rmannibucau] Feel free to add more context here. Don't know if I got it > right from our conversation in Slack. -- This message was sent by Atlassian Jira (v8.20.10#820010)