That looks good. Thanks! PR would be very welcome! On Mon, May 2, 2022 at 9:46 AM DImuthu Upeksha <dimuthu...@apache.org> wrote:
> 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) > > > > > > > > >