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

问题描述 投票:0回答:1

我在Karaf中使用蓝图引导CamelContext的启动,该启动又配置了Java DSL(Camel版本2.21.2)中定义的路由。在blueprint.xml中,我定义了一些默认的属性占位符以利用config admin 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>

在Java DSL中,我可以使用{{log.message}}占位符,因为它是一个字符串:

from("timer:timer").log("{{log.message}}")

但是,我要弄清楚的是如何设置占位符的类型,以便在以下情况下可以使用它们:

.setHeader(Exchange.HTTP_RESPONSE_CODE).constant("{{response.code}}")

这是一个人为的示例,但是我在这里试图将标头设置为int / Integer类型。

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

我已经阅读了https://camel.apache.org/manual/latest/using-propertyplaceholder.html,尤其是下面的部分:在XML DSL中使用属性占位符作为任何类型的属性,并且我看到了对自动类型转换的支持,但它似乎仅适用于到EIP选项:

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

由于我经常阅读文档,所以现在任何时候这些单词都不再有意义了,我们将不胜感激!

apache-camel blueprint-osgi
1个回答
0
投票

您可以使用@PropertyInject在路由生成器类的某个字段中插入属性,该字段可以是类型:

 @PropertyInject("myPropertyKey")
 private int myValue;

然后,您可以通过常量使用路由中的字段。

但是骆驼经常能够在需要时从一种类型转换为另一种类型,例如,在该标头示例中,您可以将其设置为字符串值,这没关系。

也可以在指定类型的地方使用简单

.setHeader("foo", simple("{{foo}}, int.class))
© www.soinside.com 2019 - 2024. All rights reserved.