blueprint里面自定义namespace后,如何获取调用者的bundle

发布于 2021-11-29 03:46:51 字数 1803 浏览 772 评论 1

bundle 1里面有如下代码

public class PpNamespaceHandler implements NamespaceHandler
{
	public ComponentMetadata decorate(Node node, ComponentMetadata cm, ParserContext context) 
	{
		return null;
	}
	public Set<Class> getManagedClasses()
	{
		return new HashSet<Class>(Arrays.asList(PpNamespaceHandler.class));
	}
	public URL getSchemaLocation(String schema)
	{
		return this.getClass().getClassLoader().getResource("schema/pp.xsd");
	}
	public Metadata parse(Element element, ParserContext context)
	{
		return null;
	}
}



blueprint.xml代码为:

<service interface="org.apache.aries.blueprint.NamespaceHandler">
	<service-properties>
		<entry key="osgi.service.blueprint.namespace" value="http://pp.isoft.com/config" />
	</service-properties>
	<bean class="com.lala.osc.api.PpNamespaceHandler" />
</service>



bundle 2 里面需要使用这个namespace

blueprint.xml

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
	xmlns:my="http://pp.isoft.com/config"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
	http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

	<my:property></my:property>

</blueprint>



每当bundle2 启动的时候,因为引用了

http://pp.isoft.com/config

这个命名空间,就会触发bundle 1的 PpNamespaceHandler 类的方法的执行

请问,如何在bundle 1 里面的PpNamespaceHandler里面获取到的是哪个bundle配置(引用)了那个命名空间

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文