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

西夏一品堂 发布于 2015/10/14 21:38
阅读 348
收藏 0

技术人有1说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配置(引用)了那个命名空间

返回顶部
顶部