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