gpt4 book ai didi

java - org.apache.felix.ipojo.ComponentFactory 无法转换为 org.apache.felix.ipojo.Factory

转载 作者:行者123 更新时间:2023-12-01 13:34:03 25 4
gpt4 key购买 nike

我有一个捆绑组件,

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

我该如何解决我的问题?谢谢。

最佳答案

嵌入 Felix(或任何其他 OSGi 框架)时,您会在类加载器之间创建边界。主机和 bundle 不使用相同的类加载器,这意味着来自内部和外部的类不兼容。换句话说,从主机访问OSGi服务特别复杂,需要使用反射。

为了简单起见,您应该使用 bundle 中的工厂服务(以及任何其他服务),而不是主机中的服务。

如果您确实需要从主机使用它们,则必须配置 OSGi 框架以从 bundle 0 导出所有必需的包。

关于java - org.apache.felix.ipojo.ComponentFactory 无法转换为 org.apache.felix.ipojo.Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com