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)
>
>
>
>

Reply via email to