Osgi Property Placeholder

一笑奈何 提交于 2019-12-11 06:44:45

问题


I can only use string binding here, enableRequestValidation should be always string, put in my bean i want to use boolean, how can i achieve this using property-placeholder bindings?

<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>

Addition the exception is like below

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]

回答1:


Are you able to use Aries Blueprint Configuration Managagement? You don't provide any information about what your environment is, but using ServiceMix, I do this all the time. For example:

<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>

Note the inclusion of verion 1.1.0 of the blueprint-cm namespace, which supports the update-strategy setting. The property injection will find the setSetting(boolean setting) method and attempt to convert the string to the boolean value. Here the default value of "true" is specified, but that can be overridden with changes to etc/myProps.cfg.




回答2:


Blueprint does not support property placeholders.



来源:https://stackoverflow.com/questions/40482233/osgi-property-placeholder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!