2017-06-22 26 views
0

我試圖使用連接到谷歌的BigTable:NotSerializableException試圖用JsonCredentials從Apache的梁查詢的BigTable

BigtableOptions.Builder bigTableOptions = new BigtableOptions.Builder() 
      .setProjectId(options.getProjectId()) 
      .setInstanceId(options.getInstanceId()) 
      .setCredentialOptions(
        CredentialOptions.jsonCredentials(
            new FileInputStream(systemResource.toFile()) 
        )); 

但是,我越來越:

Caused by: java.io.NotSerializableException: java.io.FileInputStream 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 

我試着與 2.1.0-SNAPSHOT 和 2.0.0。

有其他人遇到這個問題嗎?

謝謝。

+0

你需要的數據流和雲Bigtable的不同憑證對象?默認情況下,Cloud Bigtable憑據與數據流憑證相同。 –

+0

當我沒有指定證書時工作正常,但很好奇我是否可以明確地使用「服務用戶」。 – sanj2sanj

回答

0

我落得這樣做:

// Load the keyfile 
final String keyFile = "service-account-keyfile.json" 
final Path path = Paths.get(ClassLoader.getSystemResource(keyFile).getPath()); 
// Load and Convert key to a CredentialOptions object 
final GoogleCredentials credentials = GoogleCredentials.fromStream(Files.newInputStream(path)) 
       .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform")); 
final CredentialOptions bigTableCredentials = CredentialOptions.credential(credentials); 

//Use the credentials 
final BigtableOptions bigtableOptions = 
      new BigtableOptions.Builder() 
        .setCredentialOptions(bigTableCredentials)