Dies sieht aus wie ein älterer Thread, aber teilen unsere Erkenntnisse für das, was es wert ist.
Dieses Beispiel ist für den Google ImageAnnotatorClient, aber ich bin mir ziemlich sicher, dass es für LanguageServiceClient sehr ähnlich ist.
Old-School-Google-Bibliotheken (P12-Datei-Ära) verwenden GoogleCredential vs. die neuen GoogleCredentials. Sie sehen sich sehr ähnlich. Ich habe in der Type-Hierarchie einen FixedCredentialsProvider gefunden, der den Trick zu lösen scheint.
Dies funktionierte für uns, wir haben die Google Vision API mit einer vorhandenen P12-Datei ohne Umgebungsvariable ausgeführt. Es sieht so aus, als ob Google möchte, dass wir von diesem Weg abwandern und diesen Ansatz nicht langfristig empfehlen.
// old-school Google Authentication
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
// Spring code
String pemFile = "yourPemFile.p12";
Resource r = new ClassPathResource(pemFile);
String serviceAccountEmail = "[email protected]";
// com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder
Builder credentialBuilder = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(serviceAccountEmail)
.setServiceAccountPrivateKeyFromP12File(r.getFile());
// Cloud API endpoints, make sure that the API is enabled
Collection<String> scopes = Collections.singleton("https://www.googleapis.com/auth/cloud-vision");
GoogleCredential credential = credentialBuilder
.setServiceAccountScopes(scopes).build();
// copy over key values, note the additional "s", set some expiry
// com.google.auth.oauth2.GoogleCredentials
GoogleCredentials sac = ServiceAccountCredentials.newBuilder()
.setPrivateKey(gc.getServiceAccountPrivateKey())
.setPrivateKeyId(gc.getServiceAccountPrivateKeyId())
.setClientEmail(gc.getServiceAccountId())
.setScopes(scopes)
.setAccessToken(new AccessToken(gc.getAccessToken(), new LocalDate().plusYears(1).toDate()))
.build();
// Latest generation Google libs, GoogleCredentials extends Credentials
CredentialsProvider cp = FixedCredentialsProvider.create(sac);
ImageAnnotatorSettings settings = ImageAnnotatorSettings.newBuilder().setCredentialsProvider(cp).build();
ImageAnnotatorClient googleApi = ImageAnnotatorClient.create(settings);
Was ich brauche ein 'LanguageServiceClient' ist. Können Sie mich von "DatastoreOptions" zu "LanguageServiceClient" bringen? –