У меня есть компонент пучка,org.apache.felix.ipojo.ComponentFactory не может быть приведен к org.apache.felix.ipojo.Factory
package ipojo;
import ipojo.service.Hello;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Invalidate;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Validate;
@Component(name="hello-factory")
@Provides
public class HelloImpl implements Hello{
@Override
public void shoutHello() {
System.out.println("HellooOOOOoooOooo!");
}
@Validate
public void start() throws Exception {
System.out.println("Hello started :)");
}
@Invalidate
public void stop() throws Exception {
System.out.println("Hello Stopped :(");
}
}
В моей Java-приложении, я встроил Apache Felix и развернутый iPOJO API. Затем я попытался создать экземпляр моей выше компоненты, используя Factory Service, как:
myBundle= context.installBundle("myBundlePath");
myBundle.start();
ServiceReference[] references = myBundle.getBundleContext().getServiceReferences(Factory.class.getName(), "(factory.name=hello-factory)");
if (references == null) {
System.out.println("No references!");
}
else {
System.out.println(references[0].toString());
Factory factory = myBundle.getBundleContext().getService(references[0]);
ComponentInstance instance= factory.createComponentInstance(null);
instance.start();
}
я успешно получил ссылку на службу фабрики, но в следующей строке:
Factory factory = myBundle.getBundleContext().getService(references[0]);
Я получаю следующее ClassCastException:
java.lang.ClassCastException: org.apache.felix.ipojo.ComponentFactory cannot be cast to org.apache.felix.ipojo.Factory`
Я изменил эту строку:
Factory factory = (ComponentFactory) myBundle.getBundleContext().getService(references[0]);
тогда я получил:
java.lang.ClassCastException: org.apache.felix.ipojo.ComponentFactory cannot be cast to org.apache.felix.ipojo.ComponentFactory
Как я могу решить мою проблему? Спасибо.
благодарит Климента. Что вы подразумеваете под пучком 0? Вы хотите экспортировать пакеты в моем хост-приложении, используя Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA? – user3243330
Перемещение моего кода в пакет OSGI работало для меня. Но я заинтересован в использовании его у моего хоста. Поэтому, что именно экспортировать?И почему это решение будет работать? – user3243330
Использование вышеуказанного решения. В моем хосте я устанавливаю Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA для всех пакетов ipojo, которые можно найти на земле. Тем не менее, я получаю ту же ошибку. java.lang.ClassCastException: org.apache.felix.ipojo.ComponentFactory нельзя отнести к org.apache.felix.ipojo.Factory' –