Valentin Aitken created ARIES-1668:
--------------------------------------

             Summary: Failing to set null value inside property-placeholder 
                 Key: ARIES-1668
                 URL: https://issues.apache.org/jira/browse/ARIES-1668
             Project: Aries
          Issue Type: Bug
    Affects Versions: 1.0
            Reporter: Valentin Aitken


*Scenario:*
For a bean I'd like to supply property-placeholder with a default null value.
{code:xml}
    <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>
{code}

{code:java}
package org.apache.xxx;
public class FooImpl {
  public void setFooBar(Integer fooBar) { this.fooBar = fooBar;}
  public Integer getFooBar() { return fooBar; }
}
{code}

*Observed behaviour:*
{noformat}
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]
{noformat}

Versions loaded in karaf

{noformat}
 | 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
{noformat}

*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());|https://github.com/apache/aries/blob/trunk/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmNamespaceHandler.java#L370]




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to