Skip to content

IllegalArgumentException: 'name' must not be null thrown when property source filtering applied twice #46032

Closed
@philwebb

Description

@philwebb

Discovered by the Spring Cloud team, the fix for #45994 has caused a nasty regression when filtering is applied twice:

Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.cloud.kubernetes.config.sources[0].labels' to java.util.Map<java.lang.String, java.lang.String>
    at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:399)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:361)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$0(Binder.java:485)
    at org.springframework.boot.context.properties.bind.ValueObjectBinder$ConstructorParameter.bind(ValueObjectBinder.java:377)
    at org.springframework.boot.context.properties.bind.ValueObjectBinder.bind(ValueObjectBinder.java:86)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$2(Binder.java:488)
    at org.springframework.boot.context.properties.bind.Binder.fromDataObjectBinders(Binder.java:493)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$1(Binder.java:487)
    at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:606)
    at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:592)
    at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:487)
    at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:426)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:357)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$1(Binder.java:447)
    at org.springframework.boot.context.properties.bind.Binder$Context.withSource(Binder.java:582)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$0(Binder.java:448)
    at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:115)
    at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:91)
    at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:75)
    at org.springframework.boot.context.properties.bind.CollectionBinder.bindAggregate(CollectionBinder.java:48)
    at org.springframework.boot.context.properties.bind.AggregateBinder.bind(AggregateBinder.java:56)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$2(Binder.java:450)
    at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:606)
    at org.springframework.boot.context.properties.bind.Binder.bindAggregate(Binder.java:450)
    at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:411)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:357)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$0(Binder.java:485)
    at org.springframework.boot.context.properties.bind.ValueObjectBinder$ConstructorParameter.bind(ValueObjectBinder.java:377)
    at org.springframework.boot.context.properties.bind.ValueObjectBinder.bind(ValueObjectBinder.java:86)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$2(Binder.java:488)
    at org.springframework.boot.context.properties.bind.Binder.fromDataObjectBinders(Binder.java:493)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$1(Binder.java:487)
    at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:606)
    at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:592)
    at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:487)
    at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:426)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:357)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:345)
    at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:337)
    at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:322)
    at org.springframework.boot.context.properties.ConfigurationPropertiesBinder.bindOrCreate(ConfigurationPropertiesBinder.java:101)
    at org.springframework.boot.context.properties.ConstructorBound.from(ConstructorBound.java:44)
    ... 78 more
Caused by: java.lang.IllegalArgumentException: 'name' must not be null
    at org.springframework.util.Assert.notNull(Assert.java:182)
    at org.springframework.boot.context.properties.source.ConfigurationPropertyName.isAncestorOf(ConfigurationPropertyName.java:296)
    at org.springframework.boot.context.properties.source.FilteredIterableConfigurationPropertiesSource.<init>(FilteredIterableConfigurationPropertiesSource.java:44)
    at org.springframework.boot.context.properties.source.IterableConfigurationPropertySource.filter(IterableConfigurationPropertySource.java:69)
    at org.springframework.boot.context.properties.source.IterableConfigurationPropertySource.filter(IterableConfigurationPropertySource.java:42)
    at org.springframework.boot.context.properties.bind.MapBinder.bindAggregate(MapBinder.java:72)
    at org.springframework.boot.context.properties.bind.AggregateBinder.bind(AggregateBinder.java:56)
    at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$2(Binder.java:450)
    at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:606)
    at org.springframework.boot.context.properties.bind.Binder.bindAggregate(Binder.java:450)
    at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:411)
    at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:357)
    ... 118 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: regressionA regression from a previous release

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions