Skip to content

Enhanced client bug when dealing with kotlin nullable booleans whose names start with "is" #5454

Open
@StormeHawke

Description

@StormeHawke

Describe the bug

When using a nullable boolean property in kotlin which is prefixed by is, the property is ignored by the enhanced client when building the schema, even if you add the @DynamoDbAttribute annotation to override the name.

Expected Behavior

I recognize that I need to override the db field name due to the "is" prefix, but I expect a nullable boolean property to work just as well as a non-nullable rather than being ignored. I have another field in my same bean that works fine:

    @get:DynamoDbAttribute("isDeleted")
    var isDeleted: Boolean = false,

This property outputs logs like
some.package.model.SomeModel - Property deleted read method: public final boolean some.package.model.SomeModel.isDeleted() ||main|s.a.a.e.d.beans
some.package.model.SomeModel - Property deleted write method: public final some.package.model.SomeModel.setDeleted(boolean) ||main|s.a.a.e.d.beans

Current Behavior

With the debug logging turned on, you get a message like this in the log:

some.package.model.SomeModel - Ignoring bean property foo because it has no read (get/is) method. ||main|s.a.a.e.d.beans

Note: If you remove the ? and instead define the field as
var isFoo: Boolean = false
then the property works as expected.

Reproduction Steps

Here's an example bean that should replicate the issue

@DynamoDbBean
data class SomeModel(
    @get:DynamoDbPartitionKey
    var id: String

    @get:DynamoDbAttribute("isFoo")
    var isFoo: Boolean? = false
)

Possible Solution

I'm not sure what a fix might be, but I did figure out a workaround by delegating the property as follows, and marking my "real" property with @DynamoDbIgnore. Note the property is still nullable, but by getting rid of the "is" prefix the property plays nice with the sdk

    @get:DynamoDbAttribute("isFoo")
    var fooDelegate: Boolean?
        get() = isFoo
        set(ooo) { this.isFoo = ooo }

Additional Information/Context

Specifically working with software.amazon.awssdk:dynamodb-enhanced

Kotlin version in use is 1.9.23

AWS Java SDK version used

2.26.27 (just updated to latest to make sure it hasn't already been fixed)

JDK version used

openjdk 17.0.11 2024-04-16 LTS

Operating System and version

MacOS Sonoma 14.5

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.kotlinneeds-triageThis issue or PR still needs to be triaged.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions