Apache camel 使用blueprint中定义但在Camel Java DSL中解析的类型化默认属性占位符

Apache camel 使用blueprint中定义但在Camel Java DSL中解析的类型化默认属性占位符,apache-camel,blueprint-osgi,Apache Camel,Blueprint Osgi,我正在使用Karaf中的blueprint引导CamelContext的启动,该启动反过来配置JavaDSL(CamelVersion2.21.2)中定义的路由。在blueprint.xml中,我定义了几个默认属性占位符以利用配置管理OSGi服务: <cm:property-placeholder persistent-id="foo.MyRoute"> <cm:default-properties> <cm:property name="l

我正在使用Karaf中的blueprint引导CamelContext的启动,该启动反过来配置JavaDSL(CamelVersion2.21.2)中定义的路由。在blueprint.xml中,我定义了几个默认属性占位符以利用配置管理OSGi服务:

<cm:property-placeholder persistent-id="foo.MyRoute">
    <cm:default-properties>
        <cm:property name="log.message" value="Hello world"/>
        <cm:property name="response.code" value="200"/>
    </cm:default-properties>
</cm:property-placeholder>
但是,我想知道的是如何设置占位符的类型,以便在以下情况下使用占位符:

.setHeader(Exchange.HTTP_RESPONSE_CODE).constant("{{response.code}}")
这是一个有点做作的示例,但我在这里尝试将头设置为int/Integer类型

占位符是否仅用于端点URI定义?还是应该将解析的字符串强制转换为所需的类型?我假设我错过了一些东西,或者没有按预期使用占位符

我已经阅读了,特别是之后的章节:在XML DSL中为任何类型的属性使用属性占位符,我看到了对自动类型转换的支持,但它似乎只适用于EIP选项:

from("direct:start")
    .multicast()
    .placeholder("stopOnException", "stop")
    .to("mock:a")
    .throwException(new IllegalAccessException("Damn"))
    .to("mock:b");

如果有任何帮助,我将不胜感激,因为我经常阅读文档,现在这些词已经没有意义了

您可以使用
@PropertyInject
在route builder类中的字段上插入属性,该字段可以是以下类型:

 @PropertyInject("myPropertyKey")
 private int myValue;
然后,您可以通过常量使用路线中的字段

但Camel通常能够在需要时从一种类型转换为另一种类型,例如在该头示例中,您可以将其设置为字符串值,这样就可以了

您还可以使用simple来指定类型

.setHeader("foo", simple("{{foo}}, int.class))
.setHeader("foo", simple("{{foo}}, int.class))