我是OSGI的新手。我已经使用cxf和blueprint开发了一个学生休息服务,并将其部署在karaf中。默认情况下,karaf的URL中包含cxf。我发现我可以在etc文件夹中配置属性(org.apache.cxf.servlet.context = / student),也可以在karaf中运行config:edit / setprop / update /命令。这样我就可以用一些自定义值替换网址中的cxf。但是,现在我想从URL中删除CXF,而不在karaf中进行上述任何更改。我还有其他方法可以做到吗?我发现使用admin config服务和配置可以更新上述属性,但是它不起作用。
我引用了以下链接: How can I get properties stored in ConfigAdmin?-它对我不起作用。
使用蓝图时,我是否需要添加其他内容?以及我必须传递给createFactoryConfiguration的确切factorypid和位置。
谢谢。
答案 0 :(得分:0)
我已经找到解决问题的方法。将以下代码添加到激活器的启动方法中。
Dictionary<String, String> props = new Hashtable<String, String>();
props.put( "org.apache.cxf.servlet.context", "/student" );
// Use OSGI admin configuration to update CXF url
ServiceReference reference = context.getServiceReference( ConfigurationAdmin.class.getName() );
ConfigurationAdmin admin = (ConfigurationAdmin) context.getService( reference );
try
{
Configuration config = admin.getConfiguration( "org.apache.cxf.osgi", null );
config.update( props );
}
catch ( Exception exception )
{
throw exception;
}
无需在blueprint.xml中进行任何更改。它在karaf和Equinox中均可使用。最初,我试图在春分时不将位置参数传递给getConfiguration(),因此它不起作用。