Uploaded image for project: 'Aries'
  1. Aries
  2. ARIES-2078

Blueprint instantiation fails with services referencing sealed interface

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • blueprint-core-1.10.3, proxy-impl-1.1.11
    • None
    • Blueprint, Proxy
    • None

    Description

      Using a sealed interface hierarchy with a published service like this:

      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
      }
      

      Attempting to reference SomeService in a blueprint container results in a failure:

      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
      

      Removing the 'extends Immutable' allows the SomeService to be referenced without any issues.

      Attachments

        Activity

          People

            Unassigned Unassigned
            nite Robert Varga
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: