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

标签 java azure azure-eventhub azure-keyvault

我正在尝试以这种方式获取 key :

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 打交道,对此的任何指导都会非常有帮助。

最佳答案

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

com.microsoft.azure:azure-keyvault:1.0.0首先出现在您的 POM 中,该项目最终的版本将为 1.0.0com.microsoft.azure:azure-client-runtime ,这是包含 proxy() 的类所在的位置方法驻留。问题是这个方法直到版本1.1.0才被引入。

此处可以执行的操作是交换 Azure Key Vault 和 Azure 客户端身份验证依赖项的显示顺序。您可以做的另一件事是直接声明要在 POM 中使用哪个版本的 azure-client-runtime:

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

关于java - Azure - 尝试从 keyVault 获取 key 时,ApplicationTokenCredential 中出现 NoSuchMethodExist 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51165507/

相关文章:

java - 如何从 zipgroupfileset 中排除?

java - 卡夫卡生产者和消费者问题

azure - ADO 中的产品待办事项列表

azure-eventhub - 在 Azure Functions 中创建 Azure EventHub 消息

java - 来自不同 Java 线程的 JNI native 调用是否按顺序进行?

java - 常规Exp : Matcher: how to get last occurence in the group

azure - 是否可以将池规范移至 ADO YAML 中的模板中?

c# - 身份服务器 4 OpenId Connect 重定向到/Account/AccessDenied

azure - Azure 事件中心是否有任何方法可以计算出在指定时间使用了多少吞吐量单位?

c# - 有没有办法按事件触发数据湖分析作业?