首页 > 解决方案 > Java KeyManagementServiceClient 创建在 Jruby 中挂起

问题描述

我在运行良好(单元测试)的 java 文件(GcpEncrypt.java)中有以下块。

但是,当我将其 jar 并从 a 中调用它时logstash Jruby input plugin,它会挂在客户端创建部分。

public byte[] decryptWrappedKey(String wrappedKey, String cid)
      throws IOException {

    if (this.testMode) { logger.log(Level.INFO, "Decrypting wrapped key");}

    byte[] wrappedKeyBytes = Base64.decodeBase64(wrappedKey);

    // Create the KeyManagementServiceClient using try-with-resources to manage client cleanup.
    if (this.testMode) { logger.log(Level.INFO, "Creating KMS Client ...");}
    try {
      KeyManagementServiceClient client = KeyManagementServiceClient.create();
      logger.log(Level.INFO, "ENTERED KEY CREATION");
      String keyResourceName = CryptoKeyName.format(
        this.projectId,
        this.locationId,
        this.keyRingId,
        cid);

      // Decrypt the ciphertext with Cloud KMS.
      if (this.testMode) { logger.log(Level.INFO, "Decrypting KMS response"); }
      DecryptResponse response = client.decrypt(keyResourceName, ByteString.copyFrom(wrappedKeyBytes));
      if (this.testMode) { logger.log(Level.INFO, "Returning decrypted wraped key"); }
      client.close();
      logger.log(Level.INFO, "**************CLOSING KMS CLIENT ***********");
      return response.getPlaintext().toByteArray();
    }catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

我可以看到ENTERED KEY CREATION日志,然后它就挂了,我该如何调试呢?

编辑

KeyManagementServiceClient通过将 实例化为实例变量,我能够找到相关的。似乎'com.google.cloud', 'google-cloud-kms', '0.81.0-beta'罐子缺少com/google/cloud/kms/v1/ListKeyRingsRequest课程。

java.lang.NoClassDefFoundError: com/google/cloud/kms/v1/ListKeyRingsRequest
        at com.google.cloud.kms.v1.stub.GrpcKeyManagementServiceStub.<clinit>(com/google/cloud/kms/v1/stub/GrpcKeyManagementServiceStub.java:88)
        at com.google.cloud.kms.v1.stub.KeyManagementServiceStubSettings.createStub(com/google/cloud/kms/v1/stub/KeyManagementServiceStubSetting
s.java:292)
        at com.google.cloud.kms.v1.KeyManagementServiceClient.<init>(com/google/cloud/kms/v1/KeyManagementServiceClient.java:154)
        at com.google.cloud.kms.v1.KeyManagementServiceClient.create(com/google/cloud/kms/v1/KeyManagementServiceClient.java:135)
        at com.google.cloud.kms.v1.KeyManagementServiceClient.create(com/google/cloud/kms/v1/KeyManagementServiceClient.java:126)

标签: javalogstashjrubygoogle-cloud-kms

解决方案


推荐阅读