Seems like V3AuthenticationApi does not have an implementation for access key authentication so the invocation routes to the base interface which does not have any HTTP annotation. I implemented the missing feature and it works for my openstack setup. Here is the commit history for my fork [2]. Please let me know if this is the correct approach and if so, I can send a PR
[2] https://github.com/DImuthuUpe/jclouds/commit/c0bdf264dea02d6bdcea549405d05e3aac42f0b4 Thanks Dimuthu On Sat, Apr 30, 2022 at 11:37 AM DImuthu Upeksha <dimuthu...@apache.org> wrote: > Hi, > > I am trying to use Jclouds to access an openstack swift container using > the application credentials. Is that supported in 2.5.0 version? Below is > the code sample I used and the error message I got. I can a similar > question in StackOverflow[1] as well > > [1] > https://stackoverflow.com/questions/62950726/apache-jclouds-can-we-use-authentication-keystone-v3-with-application-credenti > > Thanks > Dimuthu > > String provider = "openstack-swift"; > String key = "key"; > String secret = "secret"; > > Properties overrides = new Properties(); > overrides.put(KeystoneProperties.KEYSTONE_VERSION, "3"); > overrides.put(KeystoneProperties.CREDENTIAL_TYPE, > CredentialTypes.API_ACCESS_KEY_CREDENTIALS); > > SwiftApi swiftApi = ContextBuilder.newBuilder(provider) > .endpoint("https://xxxxx:5000/v3/") > .credentials(key, secret) > .overrides(overrides) > .buildApi(SwiftApi.class); > > ContainerApi containerApi = swiftApi.getContainerApi("General"); > FluentIterable<Container> containers = containerApi.list(); > for (Container c : containers) { > > System.out.println(c.getName()); > } > > > > Exception in thread "main" java.lang.IllegalStateException: Optional.get() > cannot be called on an absent value > at com.google.common.base.Absent.get(Absent.java:43) > at > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:227) > at > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) > at > org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189) > at > org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85) > at > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) > at > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) > at > org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156) > at > org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123) > at com.sun.proxy.$Proxy61.authenticateAccessKey(Unknown Source) > at > org.jclouds.openstack.keystone.auth.functions.AuthenticateApiAccessKeyCredentials.authenticate(AuthenticateApiAccessKeyCredentials.java:48) > at > org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:99) > at > org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:40) > at > com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:165) > at > com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529) > at > com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278) > at > com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155) > at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) > at com.google.common.cache.LocalCache.get(LocalCache.java:3953) > at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) > at > com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4960) > at > com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4966) > at > org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:138) > at > org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:135) > at > org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:50) > at > org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:35) > at > org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:76) > at > org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:46) > at > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:75) > at > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:57) > at > com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529) > at > com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278) > at > com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155) > at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045) > at com.google.common.cache.LocalCache.get(LocalCache.java:3953) > at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976) > at > com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4960) > at > org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:150) > at > org.jclouds.location.functions.RegionToEndpoint.apply(RegionToEndpoint.java:43) > at > org.jclouds.location.functions.RegionToEndpoint.apply(RegionToEndpoint.java:32) > at > org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInParametersOrNull(RestAnnotationProcessor.java:528) > at > org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:551) > at > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:207) > at > org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) > at > org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189) > at > org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85) > at > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74) > at > org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45) > at > org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117) > at > com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:86) > at com.sun.proxy.$Proxy67.list(Unknown Source) > at jclouds.JCloudsDownload.main(JCloudsDownload.java:35) > > > >