CamelBlueprintTesting,为什么我不能覆盖这个propertyplaceholder?

时间:2017-05-23 19:38:36

标签: apache-camel blueprint-osgi

我有一个布尔标志propertyplaceholder,我试图在我的一个单元测试中覆盖,但它不起作用。

<cm:property-placeholder id="id" persistent-id="persistent-id>
  <cm:default-properties>
    <cm:property name="flag" value="true" />
  </cm:default-properties>
</cm:property-placeholder>

此标志在bean中使用:

<bean id="myBean" class="com.myBean">
  <property name="flag" value="${flag}" />
</bean>

我想在进行单元测试时将属性覆盖为false,所以我实现了useOverridePropertiesWithPropertiesComponent()方法:

@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
  Properties prop = new Properties();
  prop.put("errorQueue", "mock:error");
  prop.put("flag", false);

  return prop;

}

我的errorQueue属性工作正常,错误消息将变为“mock:error”,但该标志未被覆盖属性。有谁知道这是为什么?

2 个答案:

答案 0 :(得分:1)

<bean>

时,您无法执行这些覆盖

例如,以下${flag}由OSGi蓝图100%控制:

<bean id="myBean" class="com.myBean"> <property name="flag" value="${flag}" /> </bean>

useOverridePropertiesWithPropertiesComponent用于Camel属性占位符的Camel属性组件,例如Camel使用的{{ }}语法。

http://camel.apache.org/using-propertyplaceholder.html

答案 1 :(得分:0)

我不确定,但我认为你的价值不被接受。 Properties州的Javadoc:

  

Properties 类表示一组持久的属性。可以将属性保存到流中或从流中加载。属性列表中的每个键及其对应值都是字符串

您正在使用布尔值,请尝试使用

prop.put("flag", "false");

通常,property-placeholder的键值是字符串,并在运行时转换为适当的类型。