Apache camel 骆驼蓝图测试-如何动态替换/代理蓝图中引用的远程服务,以防止使用真正的服务?

Apache camel 骆驼蓝图测试-如何动态替换/代理蓝图中引用的远程服务,以防止使用真正的服务?,apache-camel,blueprint-osgi,Apache Camel,Blueprint Osgi,我有以下情况: 我有一个OSGI捆绑包,它在blueprint XML中定义了一个服务引用,引用了远程捆绑包中的一个接口,还有一个bean,它使用impl的一个方法来填充属性对象 来自Bundle#1的XML(消费者)的相关片段: 这里最大的问题是,我必须等到createCamelContext被调用时,BundleContext才能存在;因此,getProperties调用已经发生过一次。正如我所说的,因为在测试环境中没有FetchingService类的配置来提供环境和路径字符串,所以第一次

我有以下情况:

我有一个OSGI捆绑包,它在blueprint XML中定义了一个服务引用,引用了远程捆绑包中的一个接口,还有一个bean,它使用impl的一个方法来填充属性对象

来自Bundle#1的XML(消费者)的相关片段:

这里最大的问题是,我必须等到createCamelContext被调用时,BundleContext才能存在;因此,getProperties调用已经发生过一次。正如我所说的,因为在测试环境中没有FetchingService类的配置来提供环境和路径字符串,所以第一次调用将失败(导致一个空的Properties对象)。第二次,上面的代码在impl类中设置了属性,我们开始比赛了。这不是一个关于不起作用的问题。相反,它是一个更好、更优雅的解决方案,可以应用于其他场景

哦,在任何人提出问题之前,为了澄清这一点,此服务的要点是,我们不必为部署到Servicemix实例的每个OSGI捆绑包都提供一个.cfg文件-此中央服务将去获取其他捆绑包所需的配置,并且唯一需要存在的.cfg文件是用于获取程序的

其他相关细节:

骆驼2.13.2希望它是2.14,因为他们在该版本中添加了更多的属性占位符工具,这可能会使操作更简单


Servicemix-5.3.1

您是否尝试在测试中覆盖
CamelBlueprintTestSupport
addServicesOnStartup
(请参阅“在启动时添加服务”)

在您的情况下,类似于:

@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) {
    services.put(FetchingService.class.getName(), asService(new FetchServiceImpl(), null));
}
@覆盖
受保护的void addServicesOnStartup(映射服务){
services.put(FetchingService.class.getName(),asService(新的FetchServiceImpl(),null));
}

您是否尝试在测试中覆盖
CamelBlueprintTestSupport
addServicesOnStartup
(请参阅“在启动时添加服务”)

在您的情况下,类似于:

@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) {
    services.put(FetchingService.class.getName(), asService(new FetchServiceImpl(), null));
}
@覆盖
受保护的void addServicesOnStartup(映射服务){
services.put(FetchingService.class.getName(),asService(新的FetchServiceImpl(),null));
}

您是否尝试在测试中覆盖
CamelBlueprintTestSupport
addServicesOnStartup
(请参阅“在启动时添加服务”)

在您的情况下,类似于:

@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) {
    services.put(FetchingService.class.getName(), asService(new FetchServiceImpl(), null));
}
@覆盖
受保护的void addServicesOnStartup(映射服务){
services.put(FetchingService.class.getName(),asService(新的FetchServiceImpl(),null));
}

您是否尝试在测试中覆盖
CamelBlueprintTestSupport
addServicesOnStartup
(请参阅“在启动时添加服务”)

在您的情况下,类似于:

@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) {
    services.put(FetchingService.class.getName(), asService(new FetchServiceImpl(), null));
}
@覆盖
受保护的void addServicesOnStartup(映射服务){
services.put(FetchingService.class.getName(),asService(新的FetchServiceImpl(),null));
}

嗯,@Clauds,当我回来对我最初询问的项目进行更新时,我终于看到了这个答案。:)最后我确实使用了这种机制。现在正在升级到Camel 2.23.1。嗯,@Clauds,当我回来对我最初询问的项目进行更新时,我终于看到了这个答案。:)最后我确实使用了这种机制。现在正在升级到Camel 2.23.1。嗯,@Clauds,当我回来对我最初询问的项目进行更新时,我终于看到了这个答案。:)最后我确实使用了这种机制。现在正在升级到Camel 2.23.1。嗯,@Clauds,当我回来对我最初询问的项目进行更新时,我终于看到了这个答案。:)最后我确实使用了这种机制。现在正在升级到Camel 2.23.1。
@Override
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, Dictionary>> services) {
    services.put(FetchingService.class.getName(), asService(new FetchServiceImpl(), null));
}