Skip to content

IllegalArgumentException when using Quarkus extension with abstract classes #346

@goldmann

Description

@goldmann

In order to share similar functionality between controllers, following controller class structure was designed:

  • public abstract class AbstractPipelineRunController<T extends AbstractPipelineRun> implements ResourceController<T> {}
  • @Controller public class ClusterPipelineRunController extends AbstractPipelineRunController<ClusterPipelineRunResource> {}
  • @Controller public class PipelineRunController extends AbstractPipelineRunController<PipelineRunResource> {}

And for model classes:

  • public abstract class AbstractPipelineRun extends CustomResource<RunSpec, RunStatus> {}
  • public class PipelineRunResource extends AbstractPipelineRun implements Namespaced {}
  • public class ClusterPipelineRunResource extends AbstractPipelineRun {}

Unfortunately such hierarchy results in IllegalArgumentException. It was tested with 1.7.1 release as well as master.

Below is a stacktrace from master.

Listening for transport dt_socket at address: 5005
Registered com.redhat.cpaas.v1alpha1.pipeline.AbstractPipelineRun.RunSpec
Registered com.redhat.cpaas.v1alpha1.pipeline.AbstractPipelineRun.RunStatus
2021-02-19 17:25:33,232 INFO  [org.jbo.threads] (main) JBoss Threads version 3.2.0.Final
2021-02-19 17:25:34,069 INFO  [io.jav.qua.ext.dep.QuarkusExtensionProcessor] (build-14) Processed 'com.redhat.cpaas.k8s.controllers.PipelineRunController' controller named 'pipelineruncontroller' for 'pipelineruns.cpaas.redhat.com' CR (version 'cpaas.redhat.com/v1alpha1')
2021-02-19 17:25:34,087 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor#createConfigurationServiceAndOperator threw an exception: java.lang.IllegalArgumentException
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createControllerConfiguration(QuarkusExtensionProcessor.java:127)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.lambda$createConfigurationServiceAndOperator$0(QuarkusExtensionProcessor.java:78)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1603)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createConfigurationServiceAndOperator(QuarkusExtensionProcessor.java:79)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:308)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:182)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:59)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:78)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:372)
        at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:55)
        at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:128)
        at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:81)
        at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:144)
        at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:63)
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor#createConfigurationServiceAndOperator threw an exception: java.lang.IllegalArgumentException
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createControllerConfiguration(QuarkusExtensionProcessor.java:127)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.lambda$createConfigurationServiceAndOperator$0(QuarkusExtensionProcessor.java:78)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1603)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createConfigurationServiceAndOperator(QuarkusExtensionProcessor.java:79)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

        at io.quarkus.builder.Execution.run(Execution.java:116)
        at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
        at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:153)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:306)
        ... 9 more
Caused by: java.lang.IllegalArgumentException
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createControllerConfiguration(QuarkusExtensionProcessor.java:127)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.lambda$createConfigurationServiceAndOperator$0(QuarkusExtensionProcessor.java:78)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1603)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at io.javaoperatorsdk.quarkus.extension.deployment.QuarkusExtensionProcessor.createConfigurationServiceAndOperator(QuarkusExtensionProcessor.java:79)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)

/CC @metacosm

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions