Details
-
New Feature
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.0
Description
Scenario:
For a bean I'd like to supply property-placeholder with a default null value.
<cm:property-placeholder persistent-id="org.apache.xxx.placeholder"> <cm:default-properties> <cm:property name="foo.bar"> <null/> </cm:property> </cm:default-properties> </cm:property-placeholder> <bean class="org.apache.xxx.FooImpl" id="xxx-id"> <property name="fooBar" value="${foo.bar}"/> </bean>
package org.apache.xxx; public class FooImpl { public void setFooBar(Integer fooBar) { this.fooBar = fooBar;} public Integer getFooBar() { return fooBar; } }
Observed behaviour:
ERROR 17 o.a.a.b.c.BlueprintContainerImpl [rint Extender: 3] Unable to start blueprint container for bundle org.apache.xxx/0.x.0.SNAPSHOT org.osgi.service.blueprint.container.ComponentDefinitionException: Error setting property: PropertyDescriptor <name: maxAge, getter: class org.apache.xxx.FooImpl.getFooBar(), setter: [class org.apache.xxx.FooImpl.setFooBar(class java.lang.Integer)] at org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:963)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:929)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:910)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:844)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:811)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[17:org.apache.aries.blueprint.core:1.5.0] at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111] at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:255)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:186)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:712)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:399)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:273)[17:org.apache.aries.blueprint.core:1.5.0] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_111] at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111] at org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)[17:org.apache.aries.blueprint.core:1.5.0] at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[17:org.apache.aries.blueprint.core:1.5.0] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_111] at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_111] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_111] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_111] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_111] at java.lang.Thread.run(Thread.java:745)[:1.8.0_111] Caused by: java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)[:1.8.0_111]
Versions loaded in karaf
| mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.api/1.0.1 | mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.cm/1.0.7 | mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.core/1.5.0
My Analysis:
I discovered that org.osgi.service.blueprint.reflect.Metadata.NullMetadata.NULL set correctly on to the BeanProperty
However good work from context.parseElement(BeanProperty.class, enclosingComponent, e) is being vanished from props.addEntry(createValue(context, prop.getName(), String.class.getName()), prop.getValue());