[ 
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)

Reply via email to