Он создаст свою собственную фабрику, которая в основном будет делать что-то похожее на getService () {Object comp = clazz.newInstance (); activateComponent (соед); возврат комп; }

тоящее время я пытаюсь получить простой пакет с запущенной Service Factory.

Это мой заводской класс:

public class SvcFactory implements ServiceFactory<ServiceB> {

    @Override
    public ServiceB getService(Bundle bundle,
            ServiceRegistration<ServiceB> registration) {

        return new ServiceBImpl();
    }

    @Override
    public void ungetService(Bundle bundle, ServiceRegistration<ServiceB> registration,
            ServiceB service) {

    }

}

Это мой сервис, который должен создать завод:

public class ServiceBImpl implements ServiceB {

    private ServiceA svcA;

    public void setA(ServiceA a) {
        svcA = a;
    }

}

И, наконец, OSGI-INF / component.xml

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="bundleb.internal.SvcFactory">

   <implementation class="bundleb.internal.SvcFactory"/>

  <reference bind="setA" cardinality="1..1" interface="bundlea.ServiceA" name="ServiceA" policy="static"/>

   <service servicefactory="true">
      <provide interface="bundleb.ServiceB"/>
   </service>
</scr:component>

Если я запускаю свои тестовые пакеты (A, B и C) в течение равноденствия, я получаю следующую ошибку:

org.osgi.framework.ServiceException: org.eclipse.equinox.internal.ds.FactoryReg.getService() returned a service object that is not an instance of the service class bundleb.ServiceB

Я не могу найти много информации об использовании ServiceFeactories, объявленных в определении компонента в Интернете. Даже книга «OSGi и Equinox» не рассказывала мне много об их использовании. Может ли кто-нибудь объяснить мне, что я делаю не так?

Ответы на вопрос(3)

Ваш ответ на вопрос