You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jclouds.apache.org by "Trevor Flanagan (JIRA)" <ji...@apache.org> on 2019/03/26 14:16:00 UTC

[jira] [Updated] (JCLOUDS-1492) Dimension Data Feature API Predicates are not usable

     [ https://issues.apache.org/jira/browse/JCLOUDS-1492?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Trevor Flanagan updated JCLOUDS-1492:
-------------------------------------
    Issue Type: Bug  (was: Task)

> Dimension Data Feature API Predicates are not usable
> ----------------------------------------------------
>
>                 Key: JCLOUDS-1492
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1492
>             Project: jclouds
>          Issue Type: Bug
>            Reporter: Trevor Flanagan
>            Priority: Major
>              Labels: dimensiondata
>
> The predicates exposed in [https://github.com/apache/jclouds-labs/blob/master/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApi.java#L183-L197] and other Feature API are not working as expected.
> The issue is that where an interface is marked with {{@Delegate}} anything that exists inside is considered as something that will be invoked over HTTP. In the case of the Predicates these are not the case. The following error occurs when a call to {{api.getNetworkApi().networkDomainNormalPredicate().apply(networkDomainId);}} is made.
> {code:java}
> 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:47)
> 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.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
> at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
> at com.sun.proxy.$Proxy56.networkDomainNormalPredicate(Unknown Source)
> at org.jclouds.examples.dimensiondata.cloudcontrol.DeployNetworkDomainVlanAndServer.deployNetworkDomain(DeployNetworkDomainVlanAndServer.java:148)
> at org.jclouds.examples.dimensiondata.cloudcontrol.DeployNetworkDomainVlanAndServer.main(DeployNetworkDomainVlanAndServer.java:78){code}
> The fix is to move the Predicates into {{org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApi}} and remove them from the API classes.
> {code:java}
> public interface DimensionDataCloudControlApi extends Closeable {
>    @Delegate
>    AccountApi getAccountApi();
>    @Delegate
>    InfrastructureApi getInfrastructureApi();
>    @Delegate
>    ServerImageApi getServerImageApi();
>    @Delegate
>    NetworkApi getNetworkApi();
>    @Delegate
>    ServerApi getServerApi();
>    @Delegate
>    TagApi getTagApi();
>    @Delegate
>    CustomerImageApi getCustomerImageApi();
>    @Provides
>    @Named(VLAN_DELETED_PREDICATE)
>    Predicate<String> vlanDeletedPredicate();
>    @Provides
>    @Named(NETWORK_DOMAIN_DELETED_PREDICATE)
>    Predicate<String> networkDomainDeletedPredicate();
>    @Provides
>    @Named(NETWORK_DOMAIN_NORMAL_PREDICATE)
>    Predicate<String> networkDomainNormalPredicate();
>    @Provides
>    @Named(VLAN_NORMAL_PREDICATE)
>    Predicate<String> vlanNormalPredicate();
>    @Provides
>    @Named(SERVER_STOPPED_PREDICATE)
>    Predicate<String> serverStoppedPredicate();
>    @Provides
>    @Named(SERVER_DELETED_PREDICATE)
>    Predicate<String> serverDeletedPredicate();
>    @Provides
>    @Named(SERVER_STARTED_PREDICATE)
>    Predicate<String> serverStartedPredicate();
>    @Provides
>    @Named(SERVER_NORMAL_PREDICATE)
>    Predicate<String> serverNormalPredicate();
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)