我使用Camel-HTTP4 2.10.4组件从我的应用程序调用远程REST服务。此通信需要SSL配置。我使用resource
和password
的硬编码值成功测试了我的配置。
现在我需要使用camel的Property-Placeholder配置相同的内容。我在spring配置中使用嵌套属性。例如:
${${env:${default.fallback.env}}.path.to.keystore}
我关注了Using PropertyPlaceholder并定义了
<bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
<property name="locations">
<list>
<ref bean="confgPath1" />
<ref bean="configPath2" />
</list>
</property>
</bean>
和sslContextParameters如下
<camel:sslContextParameters id="sslContextParameters">
<camel:trustManagers>
<camel:keyStore resource="{{{{default.fallback.env}}.keystore.file}}"
password="{{{{default.fallback.env}}.keystore.password}}" />
</camel:trustManagers>
<camel:keyManagers keyPassword="{{{{default.fallback.env}}.keystore.password}}">
<camel:keyStore resource="{{{{default.fallback.env}}.keystore.file}}"
password="{{{{default.fallback.env}}.keystore.password}}" />
</camel:keyManagers>
<camel:clientParameters>
<camel:cipherSuitesFilter>
<camel:include>.*</camel:include>
</camel:cipherSuitesFilter>
</camel:clientParameters>
</camel:sslContextParameters>
我的应用程序在启动时成功加载了spring上下文。但是在点击端点后我得到了错误:
Failed to resolve endpoint <<My remote service URL>> due to: Error parsing property value: {{{{default.fallback.env}}.keystore.password}}.
我可以使用Camel的属性占位符来表示简单属性。对于前
{{default.fallback.env}}
但是,当我尝试使用嵌套属性时,它会给我上面指定的错误。帮我找出解决这个问题的正确方法。
答案 0 :(得分:2)
当前的camel属性组件不支持嵌套属性,因此我只为其填充JIRA。
由于Camel属性首先不支持嵌套属性,因此您可以定义这样的属性文件,并从系统属性设置环境并使用{{someproperty}}来引用属性。 / p>
someproperty={{{{environment}}.someproperty}}
# LOCAL SERVER
junit.someproperty=junit
# LOCAL SERVER
local.someproperty=local
# TEST
test.someproperty=test
# PROD
prod.someproperty=prod
答案 1 :(得分:0)
我刚用Spring方法创建了Camel SSL配置:
<bean id="sslContextParameters" class="org.apache.camel.util.jsse.SSLContextParameters">
<property name="keyManagers">
<bean class="org.apache.camel.util.jsse.KeyManagersParameters">
<property name="keyPassword" value="${dsi.key.password}" />
<property name="keyStore">
<bean class="org.apache.camel.util.jsse.KeyStoreParameters">
<property name="resource" value="${dsi.keystore.file}" />
<property name="type" value="JKS" />
<property name="password" value="${dsi.keystore.password}" />
<property name="camelContext" ref="camelContext" />
</bean>
</property>
<property name="camelContext" ref="camelContext" />
</bean>
</property>
<property name="camelContext" ref="camelContext" />
</bean>
我相信使用Spring的属性解析器,你可以获得更多,而且你不需要使用自定义桥接解析器。