Apache camel 使用blueprint中定义但在Camel Java DSL中解析的类型化默认属性占位符
我正在使用Karaf中的blueprint引导CamelContext的启动,该启动反过来配置JavaDSL(CamelVersion2.21.2)中定义的路由。在blueprint.xml中,我定义了几个默认属性占位符以利用配置管理OSGi服务: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
<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))