[ https://issues.apache.org/jira/browse/ARIES-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Robert Varga updated ARIES-2078: -------------------------------- Description: Using a sealed interface hierarchy with a published service like this: {code:java} sealed interface MutationBehaviour<T extends MutationBehaviour<T>> permits Immutable, Mutable { // Marker interface } public non-sealed interface Immutable extends MutationBehaviour<Immutable> { // Marker interface } public non-sealed interface Mutable extends MutationBehaviour<Mutable> { // Marker interface } public interface SomeService implements Immutable { // Does not matter } {code} Attempting to reference SomeService in a blueprint container results in a failure: {noformat} org.osgi.service.blueprint.container.ComponentDefinitionException: org.osgi.service.blueprint.container.ComponentDefinitionException: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:310) at org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:252) at org.apache.aries.blueprint.container.ServiceRecipe.internalCreate(ServiceRecipe.java:149) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360) at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190) at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:737) at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433) at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.osgi.service.blueprint.container.ComponentDefinitionException: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:141) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:268) at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:685) at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) at org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:285) ... 20 more Caused by: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at org.apache.aries.proxy.impl.interfaces.ProxyClassLoader.createProxyClass(ProxyClassLoader.java:164) at org.apache.aries.proxy.impl.interfaces.InterfaceProxyGenerator.getProxyInstance(InterfaceProxyGenerator.java:97) at org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:80) at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:77) at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:42) at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.createProxy(AbstractServiceReferenceRecipe.java:332) at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:125) ... 34 more {noformat} Removing the 'extends Immutable' allows the SomeService to be referenced without any issues. was: Using a sealed interface hierarchy with a published service like this: {code:java} sealed interface MutationBehaviour<T extends MutationBehaviour<T>> permits Immutable, Mutable { // Marker interface } public non-sealed interface Immutable extends MutationBehaviour<Immutable> { // Marker interface } public non-sealed interface Mutable extends MutationBehaviour<Mutable> { // Marker interface } public interface SomeService implements Immutable { // Does not matter } {code} Attempting to reference SomeService in a blueprint container results in a failure: {noformat} org.osgi.service.blueprint.container.ComponentDefinitionException: org.osgi.service.blueprint.container.ComponentDefinitionException: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:310) at org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:252) at org.apache.aries.blueprint.container.ServiceRecipe.internalCreate(ServiceRecipe.java:149) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360) at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190) at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:737) at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433) at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.osgi.service.blueprint.container.ComponentDefinitionException: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:141) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:268) at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:685) at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666) at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) at org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) at org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:285) ... 20 more Caused by: java.lang.IncompatibleClassChangeError: class Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface org.opendaylight.yangtools.concepts.MutationBehaviour at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at org.apache.aries.proxy.impl.interfaces.ProxyClassLoader.createProxyClass(ProxyClassLoader.java:164) at org.apache.aries.proxy.impl.interfaces.InterfaceProxyGenerator.getProxyInstance(InterfaceProxyGenerator.java:97) at org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:80) at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:77) at org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:42) at org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.createProxy(AbstractServiceReferenceRecipe.java:332) at org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:125) ... 34 more {noformat} > Blueprint instantiation fails with services referencing sealed interface > ------------------------------------------------------------------------ > > Key: ARIES-2078 > URL: https://issues.apache.org/jira/browse/ARIES-2078 > Project: Aries > Issue Type: Bug > Components: Blueprint, Proxy > Affects Versions: blueprint-core-1.10.3, proxy-impl-1.1.11 > Reporter: Robert Varga > Priority: Major > > Using a sealed interface hierarchy with a published service like this: > {code:java} > sealed interface MutationBehaviour<T extends MutationBehaviour<T>> permits > Immutable, Mutable { > // Marker interface > } > public non-sealed interface Immutable extends MutationBehaviour<Immutable> { > // Marker interface > } > public non-sealed interface Mutable extends MutationBehaviour<Mutable> { > // Marker interface > } > public interface SomeService implements Immutable { > // Does not matter > } > {code} > Attempting to reference SomeService in a blueprint container results in a > failure: > {noformat} > org.osgi.service.blueprint.container.ComponentDefinitionException: > org.osgi.service.blueprint.container.ComponentDefinitionException: > java.lang.IncompatibleClassChangeError: class > Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface > org.opendaylight.yangtools.concepts.MutationBehaviour > at > org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:310) > at > org.apache.aries.blueprint.container.ServiceRecipe.internalGetService(ServiceRecipe.java:252) > at > org.apache.aries.blueprint.container.ServiceRecipe.internalCreate(ServiceRecipe.java:149) > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) > at > org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360) > at > org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:190) > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:737) > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:433) > at > org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298) > at > java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) > at > org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106) > at > org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:45) > at > java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) > at > java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) > at java.base/java.lang.Thread.run(Thread.java:833) > Caused by: org.osgi.service.blueprint.container.ComponentDefinitionException: > java.lang.IncompatibleClassChangeError: class > Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface > org.opendaylight.yangtools.concepts.MutationBehaviour > at > org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:141) > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) > at > org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) > at > org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:268) > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:685) > at > org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666) > at > org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81) > at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90) > at > org.apache.aries.blueprint.di.RefRecipe.internalCreate(RefRecipe.java:62) > at > org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:108) > at > org.apache.aries.blueprint.container.ServiceRecipe.createService(ServiceRecipe.java:285) > ... 20 more > Caused by: java.lang.IncompatibleClassChangeError: class > Proxyf899f0ae_6f97_4f4f_9923_bd02fe63db6f cannot implement sealed interface > org.opendaylight.yangtools.concepts.MutationBehaviour > at java.base/java.lang.ClassLoader.defineClass1(Native Method) > at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) > at > org.apache.aries.proxy.impl.interfaces.ProxyClassLoader.createProxyClass(ProxyClassLoader.java:164) > at > org.apache.aries.proxy.impl.interfaces.InterfaceProxyGenerator.getProxyInstance(InterfaceProxyGenerator.java:97) > at > org.apache.aries.proxy.impl.AsmProxyManager.createNewProxy(AsmProxyManager.java:80) > at > org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingInterceptingProxy(AbstractProxyManager.java:77) > at > org.apache.aries.proxy.impl.AbstractProxyManager.createDelegatingProxy(AbstractProxyManager.java:42) > at > org.apache.aries.blueprint.container.AbstractServiceReferenceRecipe.createProxy(AbstractServiceReferenceRecipe.java:332) > at > org.apache.aries.blueprint.container.ReferenceRecipe.internalCreate(ReferenceRecipe.java:125) > ... 34 more > {noformat} > Removing the 'extends Immutable' allows the SomeService to be referenced > without any issues. -- This message was sent by Atlassian Jira (v8.20.10#820010)