我在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");
由于我经常阅读文档,所以现在任何时候这些单词都不再有意义了,我们将不胜感激!
您可以使用@PropertyInject
在路由生成器类的某个字段中插入属性,该字段可以是类型:
@PropertyInject("myPropertyKey")
private int myValue;
然后,您可以通过常量使用路由中的字段。
但是骆驼经常能够在需要时从一种类型转换为另一种类型,例如,在该标头示例中,您可以将其设置为字符串值,这没关系。
也可以在指定类型的地方使用简单
.setHeader("foo", simple("{{foo}}, int.class))