有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尝试从keyVault获取密钥时,ApplicationTokenCredential中出现java Azure NoSuchMethodExist错误

我试图通过这种方式获得钥匙:

private static String getPolicyKey(String secretName, String keyVaultUrl, String applicationId, String applicationSecret) {
  KeyVaultClient keyVaultClient = new KeyVaultClient(new ApplicationTokenCredentials(
        applicationId,          // Application ID
        "myDomain.com",                                 // Azure Active Directory Domain
        applicationSecret,  // Application Key Value
        AzureEnvironment.AZURE
  ));

  return keyVaultClient.getSecret(
        keyVaultUrl,        // KeyValut URL
        secretName   // Secret Name
  ).value();
}

但我有个例外:

java.lang.NoSuchMethodError: com.microsoft.azure.credentials.ApplicationTokenCredentials.proxy()Ljava/net/Proxy;

at com.microsoft.azure.credentials.ApplicationTokenCredentials.acquireAccessToken(ApplicationTokenCredentials.java:137)
at com.microsoft.azure.credentials.ApplicationTokenCredentials.getToken(ApplicationTokenCredentials.java:127)
at com.microsoft.azure.credentials.AzureTokenCredentials.getToken(AzureTokenCredentials.java:39)
at com.microsoft.azure.credentials.AzureTokenCredentialsInterceptor.intercept(AzureTokenCredentialsInterceptor.java:36)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
at okhttp3.RealCall.execute(RealCall.java:57)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:171)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152)
at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138)
at rx.Observable.unsafeSubscribe(Observable.java:10142)

我使用以下依赖项:

        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-eventhubs</artifactId>
            <version>0.15.1</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-keyvault</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>azure-client-authentication</artifactId>
            <version>1.1.0</version>
        </dependency>

注意:我尝试使用azure eventhubs 1.0.1版,但即使这样也会出现同样的错误

这是我第一次与azure eventhubs打交道,在这方面的任何指导都将非常有用


共 (1) 个答案

  1. # 1 楼答案

    在Maven中,当在相同距离(或深度)的多个直接依赖项之间共享一个可传递的依赖项时,最终出现在依赖项树中的依赖项将是来自第一个直接依赖项的依赖项

    由于com.microsoft.azure:azure-keyvault:1.0.0首先出现在POM中,因此项目将以com.microsoft.azure:azure-client-runtime1.0.0版本结束,这是包含proxy()方法的类所在的位置。问题是,这种方法直到版本1.1.0才被引入

    这里可以做的是交换Azure密钥库和Azure客户端身份验证依赖项的显示顺序。您可以做的另一件事是直接声明希望在POM中使用哪个版本的azure客户端运行时:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-client-runtime</artifactId>
        <version>1.1.0</version>
    </dependency>