Description
This occurs for certain property types in my entities. Optional and UUID. The message that this will be denied in a future release is concerning.
This looks similar to spring-projects/spring-framework#24999. A work-around for UUID is to declare the property as Object, but store it as a UUID. This will/can result in it being set to a String by "accessor.setProperty(idProperty, generatedId);" in MappingCouchbaseConverter.writeInternal() and similarly by "accessor.setProperty(idProperty, id);" in CouchbaseTemplate.applyUpdatedId(). To accomodate that, getId() should always check for it being a String, and if so, replace it by id = UUID.fromString(id)
public UUID getId() {
if (id != null && id.getClass()
.equals(String.class)) {
id = UUID.fromString((String) ((Object) id));
}
return (UUID)id;
}
java version 11.0.6.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to constructor java.util.Optional()
WARNING: Please consider reporting this to the maintainers of org.springframework.util.ReflectionUtils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
with --illegal-access=debug
AccessibleObject
private boolean checkCanSetAccessible(Class<?> caller, Class<?> declaringClass, boolean throwExceptionIfDenied)
. . .
if (declaringModule.isOpen(pn, callerModule)) {
131: this.logIfOpenedForIllegalAccess(caller, declaringClass); <-- warning output here
return true;
} else if (throwExceptionIfDenied) {
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to constructor java.util.Optional()
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to field java.util.Optional.value
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to field java.util.UUID.mostSigBits
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to field java.util.UUID.leastSigBits
public class BasicCouchbasePersistentEntity<T> extends BasicPersistentEntity<T, CouchbasePersistentProperty>
implements CouchbasePersistentEntity<T>, EnvironmentAware {
public BasicCouchbasePersistentEntity(final TypeInformation<T> typeInformation) {
>> 50: super(typeInformation);
validateExpirationConfiguration();
}
WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (file:/Users/michaelreiche/.m2/repository/org/springframework/spring-core/5.3.3/spring-core-5.3.3.jar) to constructor java.util.Optional()
at org.springframework.util.ReflectionUtils.makeAccessible(ReflectionUtils.java:202)
at org.springframework.data.mapping.PreferredConstructor.<init>(PreferredConstructor.java:63)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.buildPreferredConstructor(PreferredConstructorDiscoverer.java:204)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers.access$200(PreferredConstructorDiscoverer.java:91)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer$Discoverers$1.discover(PreferredConstructorDiscoverer.java:130)
at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.discover(PreferredConstructorDiscoverer.java:79)
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:112)
at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:93)
at org.springframework.data.couchbase.core.mapping.BasicCouchbasePersistentEntity.<init>(BasicCouchbasePersistentEntity.java:50)
at org.springframework.data.couchbase.core.mapping.CouchbaseMappingContext.createPersistentEntity(CouchbaseMappingContext.java:74)
at org.springframework.data.couchbase.core.mapping.CouchbaseMappingContext.createPersistentEntity(CouchbaseMappingContext.java:37)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:368)
at java.base/java.util.Collections$SingletonSet.forEach(Collections.java:4797)
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:564)
@Document
public class Person extends AbstractEntity {
@Nullable Optional<String> firstname;
at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:522)
at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:708)
at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:385)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:259)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:202)
at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:86)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:324)
at java.base/java.util.Optional.ifPresent(Optional.java:183)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:324)
at org.springframework.data.couchbase.repository.support.CouchbaseRepositoryFactoryBean.afterPropertiesSet(CouchbaseRepositoryFactoryBean.java:89)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1847)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)