如何使用管理配置服务动态从其余服务URL中删除CXF

时间:2018-08-01 18:09:35

标签: osgi cxf karaf blueprint-osgi

我是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和位置。

谢谢。

1 个答案:

答案 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(),因此它不起作用。