如何使用管理配置服务动态地从休息服务 URL 中删除 CXF

How to remove CXF from rest service URL dynamically using admin config services

我是 OSGI 新手。我使用 cxf 和 blueprint 开发了学生休息服务。将其部署在 karaf 中。默认情况下,karaf 在其 URL 中有 cxf。我发现我可以在 etc 文件夹中配置 属性(org.apache.cxf.servlet.context=/student) 或者我可以在 karaf 中配置 运行 config:edit/setprop/update/ 命令。这样我就可以用一些自定义值替换 url 中的 cxf。但现在我想从我的 url 中删除 CXF,而不对 karaf 进行上述任何更改。还有其他方法可以做同样的事情吗?我发现使用管理配置服务和配置我可以更新上面的 属性 但它不起作用。

我提到了以下 link: - 它对我不起作用。

我正在使用蓝图,我需要添加任何额外的东西吗?以及我必须传递给 createFactoryConfiguration 的 factorypid 和位置到底是什么。

提前致谢。

我找到了解决问题的方法。将以下代码添加到激活器的启动方法。

  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。最初我在 equinox 中尝试没有将位置参数传递给 getConfiguration() 因此它不起作用。