diff --git a/pom.xml b/pom.xml index a6c89ca5..66e766b1 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 3.14.9 6.0.10 0.0.4 - 2022.0.7 + 2023.0.1 6.0.2 2022.0.8 diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java index 6652307b..d22913aa 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/BasicVaultPersistentEntity.java @@ -15,6 +15,7 @@ */ package org.springframework.vault.repository.mapping; +import org.springframework.data.keyvalue.core.mapping.AnnotationBasedKeySpaceResolver; import org.springframework.data.keyvalue.core.mapping.BasicKeyValuePersistentEntity; import org.springframework.data.keyvalue.core.mapping.KeySpaceResolver; import org.springframework.data.util.TypeInformation; @@ -43,10 +44,25 @@ public class BasicVaultPersistentEntity extends BasicKeyValuePersistentEntity /** * Creates new {@link BasicVaultPersistentEntity}. * @param information must not be {@literal null}. - * @param fallbackKeySpaceResolver can be {@literal null}. + * @param keySpaceResolver can be {@literal null}. */ - public BasicVaultPersistentEntity(TypeInformation information, KeySpaceResolver fallbackKeySpaceResolver) { - super(information, fallbackKeySpaceResolver); + public BasicVaultPersistentEntity(TypeInformation information, @Nullable KeySpaceResolver keySpaceResolver) { + super(information, type -> { + + if (keySpaceResolver != null) { + return keySpaceResolver.resolveKeySpace(type); + } + + String keyspace = AnnotationBasedKeySpaceResolver.INSTANCE.resolveKeySpace(type); + if (StringUtils.hasText(keyspace)) { + + // fallback to use keyspace resolution and SpEL expression handling of + // BasicKeyValuePersistentEntity. + return null; + } + + return SimpleClassNameKeySpaceResolver.INSTANCE.resolveKeySpace(type); + }); Secret annotation = findAnnotation(Secret.class); diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/SimpleClassNameKeySpaceResolver.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/SimpleClassNameKeySpaceResolver.java new file mode 100644 index 00000000..7d90ccdc --- /dev/null +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/SimpleClassNameKeySpaceResolver.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.vault.repository.mapping; + +import org.springframework.data.keyvalue.core.mapping.KeySpaceResolver; +import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; +import org.springframework.util.StringUtils; + +/** + * Most trivial implementation of {@link KeySpaceResolver} returning the + * {@link Class#getName()}. + * + * @author Mark Paluch + */ +enum SimpleClassNameKeySpaceResolver implements KeySpaceResolver { + + INSTANCE; + + @Override + public String resolveKeySpace(Class type) { + + Assert.notNull(type, "Type must not be null"); + return StringUtils.uncapitalize(ClassUtils.getUserClass(type).getSimpleName()); + } + +} diff --git a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/VaultMappingContext.java b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/VaultMappingContext.java index 73a88396..ae05310a 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/VaultMappingContext.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/repository/mapping/VaultMappingContext.java @@ -20,9 +20,7 @@ import org.springframework.data.keyvalue.core.mapping.context.KeyValueMappingCon import org.springframework.data.mapping.model.Property; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.util.TypeInformation; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; -import org.springframework.util.StringUtils; +import org.springframework.lang.Nullable; /** * Mapping context for {@link VaultPersistentEntity Vault-specific entities}. @@ -32,20 +30,20 @@ import org.springframework.util.StringUtils; */ public class VaultMappingContext extends KeyValueMappingContext, VaultPersistentProperty> { - private KeySpaceResolver fallbackKeySpaceResolver = SimpleClassNameKeySpaceResolver.INSTANCE; - + /** + * @return the {@link KeySpaceResolver} if configured. + * @deprecated since 3.1, {@link KeySpaceResolver} has fully moved into + * {@link KeyValueMappingContext}. + */ + @Nullable + @Deprecated(since = "3.1", forRemoval = true) public KeySpaceResolver getFallbackKeySpaceResolver() { - return this.fallbackKeySpaceResolver; - } - - @Override - public void setFallbackKeySpaceResolver(KeySpaceResolver fallbackKeySpaceResolver) { - this.fallbackKeySpaceResolver = fallbackKeySpaceResolver; + return super.getKeySpaceResolver(); } @Override protected VaultPersistentEntity createPersistentEntity(TypeInformation typeInformation) { - return new BasicVaultPersistentEntity<>(typeInformation, this.fallbackKeySpaceResolver); + return new BasicVaultPersistentEntity<>(typeInformation, getKeySpaceResolver()); } @Override @@ -54,23 +52,4 @@ public class VaultMappingContext extends KeyValueMappingContext type) { - - Assert.notNull(type, "Type must not be null"); - return StringUtils.uncapitalize(ClassUtils.getUserClass(type).getSimpleName()); - } - - } - }