Osgi Property Placeholder

时间:2016-11-08 08:31:15

标签: java properties osgi placeholder

我只能在这里使用字符串绑定,enableRequestValidation应该总是字符串,放在我的bean中我想使用boolean,我怎样才能使用property-placeholder绑定来实现呢?

<property-placeholder 
    persistent-id="JsonValidator"
    update-strategy="reload" placeholder-prefix="$[" placeholder-suffix="]">
    <default-properties>
        <property name="enableRequestValidation" value="false"></property>
    </default-properties>
</property-placeholder>

<bean id="jsonSchemaRegistration"       class="rest.service.impl.jsonschema.JsonSchemaDynamicFeatureImpl">
    <property name="enableRequestValidation" value="$[enabledRequestValidation]"></property>
</bean>

添加例外情况如下

2016-11-08 11:25:34,944 | ERROR | Thread-74        | BlueprintContainerImpl
      | 15 - org.apache.aries.blueprint.core - 1.4.4 | Unable to start blueprint
 container for bundle core.rest.service.impl/0.6.0.SNAP
SHOT
org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting
 property: PropertyDescriptor <name: enableRequestValidation, getter: class core.rest.service.impl.jsonschema.JsonSchemaDynamicFeatureI
mpl.isEnableRequestValidation(), setter: [class JsonSchemaDynamicFeatureImpl.setEnableRequestValidati
on(boolean)]
        at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecip
e.java:939)[15:org.apache.aries.blueprint.core:1.4.4]
        at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRec
ipe.java:905)[15:org.apache.aries.blueprint.core:1.4.4]
        at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRec
ipe.java:886)[15:org.apache.aries.blueprint.core:1.4.4]

2 个答案:

答案 0 :(得分:1)

您是否可以使用Aries Blueprint Configuration Managagement?您没有提供有关您的环境的任何信息,但使用ServiceMix,我会一直这样做。例如:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:config="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
   xsi:schemaLocation="
     http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/smlns/blueprint/v1.0.0/blueprint.xsd">

  <!-- OSGi blueprint property placeholder binding to a configuration file -->
  <config:property-placeholder id="myProps.props" persistent-id="myProps" update-strategy="reload">
    <config:default-properties>
      <config:property name="my.setting" value="true" />
    </config:default-properties>
  </config:property-placeholder>

  <bean id="myBean" class="org.me.MyClass">
    <property name="setting" value="${my.setting}" />
  </bean>
</blueprint>

请注意包含blueprint-cm命名空间的verion 1.1.0,它支持更新策略设置。属性注入将找到setSetting(布尔设置)方法并尝试将字符串转换为布尔值。这里默认值为&#34; true&#34;已指定,但可以通过更改etc / myProps.cfg覆盖它。

答案 1 :(得分:-1)

Blueprint不支持属性占位符。