commit | 238c97507816606a0aeca2fafd7a3196bfb7f1dc | [log] [tgz] |
---|---|---|
author | Jean-Noël Rouvignac <JnRouvignac@users.noreply.github.com> | Fri Jun 26 19:55:32 2020 +0200 |
committer | GitHub <noreply@github.com> | Fri Jun 26 19:55:32 2020 +0200 |
tree | e3bea8af293bbdbf8b6394e68fe0ab2203c915ee | |
parent | 8762fbaf8efca5568c32b8e74b0dac1297b3f59b [diff] |
JCLOUDS-1542 Java 11 warns of illegal reflective access (#76) With Java 11, an illegal reflective access is output for the google cloud storage blobstore. WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.jclouds.reflect.Reflection2$1 (file:/.../jclouds-core.jar) to constructor java.lang.String(char[],int,int,java.lang.Void) WARNING: Please consider reporting this to the maintainers of org.jclouds.reflect.Reflection2$1 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 Indeed, JClouds calls `setAccessible(true)` on the package protected constructor `java.lang.String(char[],int,int,java.lang.Void)`. Investigating the code, it turns out it is looking for constructors annotated with any of: * java.beans.ConstructorProperties * org.jclouds.json.SerializedNames * com.google.inject.Inject But `String` being defined in `java.base` module, it is impossible that it will be annotated with any of these annotation. This commit is complementary to JClouds commit db4e4af931ef19f582b85f02efb93e50f1c5d01c . Reflection2.java: Do not call `setAccessible(true)` on core java constructors and methods. For reference, here is the stacktrace of this illegal access warning: java.lang.String.<init>(String.java:3208) java.lang.String.<init>(String.java:251) java.util.StringJoiner.compactElts(StringJoiner.java:250) java.util.StringJoiner.toString(StringJoiner.java:173) jdk.internal.module.IllegalAccessLogger.loudWarning(IllegalAccessLogger.java:339) jdk.internal.module.IllegalAccessLogger.log(IllegalAccessLogger.java:288) jdk.internal.module.IllegalAccessLogger.log(IllegalAccessLogger.java:261) jdk.internal.module.IllegalAccessLogger.logIfOpenedForIllegalAccess(IllegalAccessLogger.java:226) java.lang.reflect.AccessibleObject.logIfOpenedForIllegalAccess(AccessibleObject.java:366) java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:325) java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:280) java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189) java.lang.reflect.Constructor.setAccessible(Constructor.java:182) org.jclouds.reflect.Reflection2$1.load(Reflection2$1.java:157) org.jclouds.reflect.Reflection2$1.load(Reflection2$1.java:153) com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache$LoadingValueReference.java:3529) com.google.common.cache.LocalCache$Segment.loadSync(LocalCache$Segment.java:2278) com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache$Segment.java:2155) com.google.common.cache.LocalCache$Segment.get(LocalCache$Segment.java:2045) com.google.common.cache.LocalCache.get(LocalCache.java:3953) com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache$LocalLoadingCache.java:4960) org.jclouds.reflect.Reflection2.get(Reflection2.java:346) org.jclouds.reflect.Reflection2.constructors(Reflection2.java:100) org.jclouds.json.internal.NamingStrategies$AnnotationConstructorNamingStrategy.getDeserializer(NamingStrategies$AnnotationConstructorNamingStrategy.java:271) org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory.create(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:125) com.google.gson.Gson.getAdapter(Gson.java:458) org.jclouds.json.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117) org.jclouds.json.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166) org.jclouds.json.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102) com.google.gson.Gson.getAdapter(Gson.java:458) com.google.gson.Gson.toJson(Gson.java:696) com.google.gson.Gson.toJson(Gson.java:683) com.google.gson.Gson.toJson(Gson.java:638) com.google.gson.Gson.toJson(Gson.java:618) org.jclouds.json.internal.GsonWrapper.toJson(GsonWrapper.java:65) org.jclouds.oauth.v2.functions.ClaimsToAssertion.apply(ClaimsToAssertion.java:59) org.jclouds.oauth.v2.functions.ClaimsToAssertion.apply(ClaimsToAssertion.java:43) org.jclouds.rest.internal.RestAnnotationProcessor.getParamValue(RestAnnotationProcessor.java:829) org.jclouds.rest.internal.RestAnnotationProcessor.getFormParamKeyValues(RestAnnotationProcessor.java:847) org.jclouds.rest.internal.RestAnnotationProcessor.addFormParams(RestAnnotationProcessor.java:435) org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:258) org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189) org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85) org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156) org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123) com.sun.proxy.$Proxy49.authorize(Unknown Source) org.jclouds.oauth.v2.filters.JWTBearerTokenFlow$AuthorizeToken.load(JWTBearerTokenFlow$AuthorizeToken.java:84) org.jclouds.oauth.v2.filters.JWTBearerTokenFlow$AuthorizeToken.load(JWTBearerTokenFlow$AuthorizeToken.java:68) com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache$LoadingValueReference.java:3529) com.google.common.cache.LocalCache$Segment.loadSync(LocalCache$Segment.java:2278) com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache$Segment.java:2155) com.google.common.cache.LocalCache$Segment.get(LocalCache$Segment.java:2045) com.google.common.cache.LocalCache.get(LocalCache.java:3953) com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache$LocalLoadingCache.java:4960) com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache$LocalLoadingCache.java:4966) org.jclouds.oauth.v2.filters.JWTBearerTokenFlow.filter(JWTBearerTokenFlow.java:99) org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:90) org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:91) org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117) com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:86) com.sun.proxy.$Proxy54.simpleUpload(Unknown Source) org.jclouds.googlecloudstorage.blobstore.GoogleCloudStorageBlobStore.uploadMultipartPart(GoogleCloudStorageBlobStore.java:422) org.jclouds.blobstore.internal.BaseBlobStore$BlobUploader.call(BaseBlobStore.java:415) org.jclouds.blobstore.internal.BaseBlobStore$BlobUploader.call(BaseBlobStore.java:402) com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125) com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69) com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor$Worker.java:628) java.lang.Thread.run(Thread.java:834)
Apache jclouds is an open source multi-cloud toolkit for the Java platform that gives you the freedom to create applications that are portable across clouds while giving you full control to use cloud-specific features.
For more information about using or contributing to jclouds, please visit our website at jclouds.apache.org.
Copyright (C) 2009-2019 The Apache Software Foundation
Licensed under the Apache License, Version 2.0