spring-projects / spring-vault

Provides familiar Spring abstractions for HashiCorp Vault
https://spring.io/projects/spring-vault
Apache License 2.0
283 stars 186 forks source link

Can not delete entity if id is UUID #777

Closed qUser13 closed 1 year ago

qUser13 commented 1 year ago

I use org.springframework.vault:spring-vault-core:3.0.2 and have faced an issue that if entity uses UUID as key then it can not be deleted. The exception -


org.springframework.data.keyvalue.core.UncategorizedKeyValueException: class java.util.UUID cannot be cast to class java.lang.String (java.util.UUID and java.lang.String are in module java.base of loader 'bootstrap')
    at org.springframework.data.keyvalue.core.KeyValuePersistenceExceptionTranslator.translateExceptionIfPossible(KeyValuePersistenceExceptionTranslator.java:51)
    at org.springframework.data.keyvalue.core.KeyValueTemplate.resolveExceptionIfPossible(KeyValueTemplate.java:405)
    at org.springframework.data.keyvalue.core.KeyValueTemplate.execute(KeyValueTemplate.java:316)
    at org.springframework.data.keyvalue.core.KeyValueTemplate.delete(KeyValueTemplate.java:293)
    at org.springframework.data.keyvalue.repository.support.SimpleKeyValueRepository.deleteById(SimpleKeyValueRepository.java:133)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
...
Caused by: java.lang.ClassCastException: class java.util.UUID cannot be cast to class java.lang.String (java.util.UUID and java.lang.String are in module java.base of loader 'bootstrap')
    at org.springframework.vault.repository.convert.SecretDocumentAccessor.put(SecretDocumentAccessor.java:86)
    at org.springframework.vault.repository.convert.MappingVaultConverter.writeInternal(MappingVaultConverter.java:420)
    at org.springframework.vault.repository.convert.MappingVaultConverter.writeInternal(MappingVaultConverter.java:406)
    at org.springframework.vault.repository.convert.MappingVaultConverter.write(MappingVaultConverter.java:368)
    at org.springframework.vault.repository.convert.MappingVaultConverter.write(MappingVaultConverter.java:57)
    at org.springframework.vault.repository.core.VaultKeyValueAdapter.deleteEntity(VaultKeyValueAdapter.java:145)
    at org.springframework.vault.repository.core.VaultKeyValueAdapter.delete(VaultKeyValueAdapter.java:139)```
mp911de commented 1 year ago

We should apply a converter to convert identifiers to String and vice versa.

adamzr commented 1 year ago

Note: This is a regression. It worked in previous versions. This is blocking the Spring Boot 3 upgrade for us.

qUser13 commented 1 year ago

@mp911de could you give us ETA for release with this fix? It is blocking Spring Boot 3 upgrade for us.

mp911de commented 1 year ago

I've scheduled a release for next week Monday.