2016-04-05 16 views
0

Bir dosya alan ve ardından Google App Engine'de çalışan Google Cloud Storage'a eklemeyi deneyen bir web uygulamasına sahibim.Google App Engine ve Depolama Alanı API'si auth hatası

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'memcache' or call 'Get()' was not found. 
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:173) 
at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:171) 
at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:26) 
at com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:49) 
at com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessToken(AppIdentityServiceImpl.java:286) 
at com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential.intercept(AppIdentityCredential.java:98) 
at com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential$AppEngineCredentialWrapper.intercept(AppIdentityCredential.java:243) 
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) 

Bu (gutil ve her şeyi kurulum) sadece iyi benim YEREL makinede çalışır: Bu alıyorum hatadır. GAE'ye dağıtıldığında yukarıdakilerle başarısız olur. İzinleri kontrol ettiniz ve tüm Google Cloud API'larına erişimi gösterir. Bu kod (https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/storage/json-api/src/main/java/StorageFactory.java)

Bütünlüğü için
private static Storage buildService() throws IOException, GeneralSecurityException { 
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport(); 
JsonFactory jsonFactory = new JacksonFactory(); 
GoogleCredential credential = GoogleCredential.getApplicationDefault(transport, jsonFactory); 

if (credential.createScopedRequired()) { 
    Collection<String> bigqueryScopes = StorageScopes.all(); 
    credential = credential.createScoped(bigqueryScopes); 
} 

return new Storage.Builder(transport, jsonFactory, credential) 
    .setApplicationName("GCS Samples") 
    .build(); 
} 

Google'ın örnekten doğrudan, başarısız bir parçasıdır, burada yukarıda buildService kullandığı kod

  Storage client = StorageFactory.getService(); 
     Storage.Objects.Insert insertRequest = client.objects().insert(
       bucketName, objectMetadata, contentStream); 
     insertRequest.execute(); 

(yine yukarıdaki github örnek bağlantısından) pom.xml

<parent> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-parent</artifactId> 
<version>1.3.2.RELEASE</version> 
<relativePath/> <!-- lookup parent from repository --> 
</parent> 
<dependencies> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>com.google.appengine.tools</groupId> 
    <artifactId>appengine-gcs-client</artifactId> 
    <version>RELEASE</version> 
</dependency> 

ait deps bölümleri GAE'nin konsolu GAE'nin v1.9.35 kullanarak bulunuyor gösterir. Burada alt

Yine
Module & version 
Module: default 
Version: 20160405t155800 
App Engine version: 1.9.35 
Managed by 
Google 
Availability 
... 
GAE managed VM for module: default, version: 20160405t155800 
Tags 
None 
Machine type 

g1-small (1 vCPU, 1.7 GB memory) 
CPU platform 

Intel Haswell 
Zone 

us-central1-c 

IP forwarding 

off 
Boot disk and local disks 

Name Size (GB) Type Mode  
redacted 
10 
Standard persistent disk 
Boot, read/write 

Delete boot disk when instance is deleted 
Additional disks 


Preemptibility 
Off (recommended) 
Automatic restart 
Off 
On host maintenance 
Terminate VM instance 
Service account 
----- 
Cloud API access scopes 

This instance has full API access to all Google Cloud services.  

mevcut perma gösteren örneğinden redacted bilgi, var app lokal çalışır ve Google Cloud Storage dosya yüklemeleri gönderir. Uygulamayı herhangi bir şans olmadan GAE'ye yüklemek için birkaç kez denedim. GcsService lib farklı bir şekilde başarısız kullanarak, aynı zamanda

latest: Pulling from google_appengine/openjdk8 

ama nedense benim uygulama düzgün tanınmaz, çünkü şüpheli: Bu uygulama GAE'nin Esnek sürümleri konuşlandırılmışsa, bu gösteriyor GAE üzerinde uygun yetkilendirme ile GAE'nin uygulaması olarak:

Caused by: java.io.IOException: java.lang.NullPointerException 
at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService$BlobStorageAdapter.getInstance(LocalRawGcsService.java:186) 
at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService$BlobStorageAdapter.access$000(LocalRawGcsService.java:109) 
at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.ensureInitialized(LocalRawGcsService.java:194) 
at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.beginObjectCreation(LocalRawGcsService.java:249) 
at com.google.appengine.tools.cloudstorage.dev.LocalRawGcsService.beginObjectCreation(LocalRawGcsService.java:92) 
at com.google.appengine.tools.cloudstorage.GcsServiceImpl$1.call(GcsServiceImpl.java:74) 
at com.google.appengine.tools.cloudstorage.GcsServiceImpl$1.call(GcsServiceImpl.java:70) 

kodu:

   GcsOutputChannel outputChannel = gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance()); 
      InputStream inputStream = uploadfile.getInputStream(); 
      copy(inputStream, Channels.newOutputStream(outputChannel)); 

cevap

1

Sen (bu örnek com.google.appengine.api.memcache gibi) GAE'nin standart API'leri kullanabilirsiniz sadece üzerinde Bunu destekleyen temel çalışma zamanları. Liste: https://cloud.google.com/appengine/docs/flexible/custom-runtimes/build#base_images

Durumunuzda kullanılan temel çalışma zamanı, GAE standart ortam API'lerini desteklemeyen google_appengine/openjdk8'dir. https://github.com/GoogleCloudPlatform/gcloud-java

:

Şimdi, bu gcloud-java kütüphanesi aracılığıyla yeni bir Java Bulut API'ler (bu GCS depolama erişim dahil) kullanabilirsiniz