[
https://issues.apache.org/jira/browse/CXF-8968?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andriy Redko resolved CXF-8968.
-------------------------------
Resolution: Fixed
> OpenTelemetryClientFeature cannot be used as a CDI bean unless it has a
> no-args constructor
> -------------------------------------------------------------------------------------------
>
> Key: CXF-8968
> URL: https://issues.apache.org/jira/browse/CXF-8968
> Project: CXF
> Issue Type: Improvement
> Affects Versions: 4.0.3
> Reporter: Peter Palaga
> Priority: Major
> Fix For: 3.5.8, 3.6.3, 4.0.4
>
>
> I am playing with the new OpenTelemetryClientFeature on Quarkus, where we
> typically produce CXF features as CDI beans. Quarkus CDI implementation does
> not allow beans of type OpenTelemetryClientFeature, because the class does
> not have the no-args constructor.
> We just need to add the default constructor, much like we already have it in
> OpenTelemetryFeature.
> A PR follows.
> For the sake of completeness here is the stack trace:
> {code}
> java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure:
> Build failed due to errors
> [error]: Build step
> io.quarkus.arc.deployment.ArcProcessor#generateResources threw an exception:
> jakarta.enterprise.inject.spi.DeploymentException: It's not possible to
> automatically add a synthetic no-args constructor to an unproxyable bean
> class. You need to manually add a non-private no-args constructor to
> io.quarkiverse.cxf.opentelemetry.it.BeanProducers$QuarkusOpenTelemetryClientFeature
> in order to fulfill the requirements for normal scoped/intercepted/decorated
> beans.
> at
> io.quarkus.arc.processor.Beans.cannotAddSyntheticNoArgsConstructor(Beans.java:958)
> at io.quarkus.arc.processor.Beans.validateBean(Beans.java:857)
> at io.quarkus.arc.processor.BeanInfo.validate(BeanInfo.java:605)
> at
> io.quarkus.arc.processor.BeanDeployment.validateBeans(BeanDeployment.java:1565)
> at
> io.quarkus.arc.processor.BeanDeployment.validate(BeanDeployment.java:482)
> at
> io.quarkus.arc.processor.BeanProcessor.validate(BeanProcessor.java:169)
> at
> io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:474)
> 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
> io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
> at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
> at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
> at
> org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
> at
> org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
> at java.base/java.lang.Thread.run(Thread.java:840)
> at org.jboss.threads.JBossThread.run(JBossThread.java:501)
> at
> io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
> at
> io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
> at java.base/java.util.Optional.orElseGet(Optional.java:364)
> at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
> at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
> Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException:
> Build failure: Build failed due to errors
> [error]: Build step
> io.quarkus.arc.deployment.ArcProcessor#generateResources threw an exception:
> jakarta.enterprise.inject.spi.DeploymentException: It's not possible to
> automatically add a synthetic no-args constructor to an unproxyable bean
> class. You need to manually add a non-private no-args constructor to
> io.quarkiverse.cxf.opentelemetry.it.BeanProducers$QuarkusOpenTelemetryClientFeature
> in order to fulfill the requirements for normal scoped/intercepted/decorated
> beans.
> at
> io.quarkus.arc.processor.Beans.cannotAddSyntheticNoArgsConstructor(Beans.java:958)
> at io.quarkus.arc.processor.Beans.validateBean(Beans.java:857)
> at io.quarkus.arc.processor.BeanInfo.validate(BeanInfo.java:605)
> at
> io.quarkus.arc.processor.BeanDeployment.validateBeans(BeanDeployment.java:1565)
> at
> io.quarkus.arc.processor.BeanDeployment.validate(BeanDeployment.java:482)
> at
> io.quarkus.arc.processor.BeanProcessor.validate(BeanProcessor.java:169)
> at
> io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:474)
> 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
> io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
> at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
> at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
> at
> org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
> at
> org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
> at java.base/java.lang.Thread.run(Thread.java:840)
> at org.jboss.threads.JBossThread.run(JBossThread.java:501)
> at
> io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:334)
> at
> io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:251)
> at
> io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
> at
> io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:224)
> at
> io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:605)
> at
> io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
> ... 1 more
> Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due
> to errors
> [error]: Build step
> io.quarkus.arc.deployment.ArcProcessor#generateResources threw an exception:
> jakarta.enterprise.inject.spi.DeploymentException: It's not possible to
> automatically add a synthetic no-args constructor to an unproxyable bean
> class. You need to manually add a non-private no-args constructor to
> io.quarkiverse.cxf.opentelemetry.it.BeanProducers$QuarkusOpenTelemetryClientFeature
> in order to fulfill the requirements for normal scoped/intercepted/decorated
> beans.
> at
> io.quarkus.arc.processor.Beans.cannotAddSyntheticNoArgsConstructor(Beans.java:958)
> at io.quarkus.arc.processor.Beans.validateBean(Beans.java:857)
> at io.quarkus.arc.processor.BeanInfo.validate(BeanInfo.java:605)
> at
> io.quarkus.arc.processor.BeanDeployment.validateBeans(BeanDeployment.java:1565)
> at
> io.quarkus.arc.processor.BeanDeployment.validate(BeanDeployment.java:482)
> at
> io.quarkus.arc.processor.BeanProcessor.validate(BeanProcessor.java:169)
> at
> io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:474)
> 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
> io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
> at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
> at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
> at
> org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
> at
> org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
> at java.base/java.lang.Thread.run(Thread.java:840)
> at org.jboss.threads.JBossThread.run(JBossThread.java:501)
> at io.quarkus.builder.Execution.run(Execution.java:123)
> at
> io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
> at
> io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
> at
> io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:330)
> ... 6 more
> Caused by: jakarta.enterprise.inject.spi.DeploymentException: It's not
> possible to automatically add a synthetic no-args constructor to an
> unproxyable bean class. You need to manually add a non-private no-args
> constructor to
> io.quarkiverse.cxf.opentelemetry.it.BeanProducers$QuarkusOpenTelemetryClientFeature
> in order to fulfill the requirements for normal scoped/intercepted/decorated
> beans.
> at
> io.quarkus.arc.processor.Beans.cannotAddSyntheticNoArgsConstructor(Beans.java:958)
> at io.quarkus.arc.processor.Beans.validateBean(Beans.java:857)
> at io.quarkus.arc.processor.BeanInfo.validate(BeanInfo.java:605)
> at
> io.quarkus.arc.processor.BeanDeployment.validateBeans(BeanDeployment.java:1565)
> at
> io.quarkus.arc.processor.BeanDeployment.validate(BeanDeployment.java:482)
> at
> io.quarkus.arc.processor.BeanProcessor.validate(BeanProcessor.java:169)
> at
> io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:474)
> at java.base/java.lang.reflect.Method.invoke(Method.java:568)
> at
> io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
> at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
> at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
> at
> org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
> at
> org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
> at java.base/java.lang.Thread.run(Thread.java:840)
> at org.jboss.threads.JBossThread.run(JBossThread.java:501)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)