2014-06-21 20 views
5

Próbuję zrobić proste przesyłanie i pobieranie na Appengine z Biblioteką klienta Google Cloud Storage.Google Cloud Storage: nie można zainicjować klasy OauthRawGcsServiceFactory

trakcie realizacji, zwraca te błędy:

java.lang.NoClassDefFoundError: Could not initialize class com.google.appengine.tools.cloudstorage.oauth.OauthRawGcsServiceFactory 
    at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService(GcsServiceFactory.java:42) 
    at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService(GcsServiceFactory.java:34) 

punktów do błędów tutaj:

@Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
     GcsFilename fileName = getFileName(request); 

     GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE); 
     copy(Channels.newInputStream(readChannel), response.getOutputStream()); 
    } 

    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { 
     GcsOutputChannel outputChannel = gcsService.createOrReplace(getFileName(request), GcsFileOptions.getDefaultInstance()); 
     copy(request.getInputStream(), Channels.newOutputStream(outputChannel)); 
    } 

Jak mogę rozwiązać ten problem?

Odpowiedz

2

Brak jednego z wymaganych słoików w folderze /war/WEB-INF/lib/.

Po pierwsze, jeśli korzystasz z platformy Eclipse, sprawdź, czy na karcie Problemy nie ma ostrzeżeń na temat zasobu, który nie jest dostępny na serwerze. Jeśli je widzisz, kliknij QuickFix prawym przyciskiem myszy i wybierz opcję "Kopiuj do ...". Jeśli nie używasz Eclipse, sprawdź ręcznie.

Jeśli to nie pomoże, sprawdź, czy zawiera wszystkie zależności niezbędne do projekcji:

https://code.google.com/p/google-api-java-client/wiki/Setup#Download_Library_with_Dependencies

+0

Próbowałem Twojego rozwiązania, ale nie zadziałało. Dzięki, @Andrei Volgin! – benjtupas

0

Zawsze należy używać narzędzi, takich jak Maven lub Ivy rozwiązać zależności dla Ciebie. Kopiowanie plików JAR do katalogu war/WEB-INF/lib/ i ręczne edytowanie pliku .classpath będzie bolesne i może nie zawsze Ci pomóc. Jeśli używasz wtyczki Eclipse & Google App Engine, użyj Dodaj Google APIs ... jak wspomniano tutaj - Google Plugin for Eclipse. W moim przypadku dodanie Cloud Storage API za pomocą wtyczki Google for Eclipse pomogło w rozwiązaniu tego problemu: NoClassDefFoundError.

+0

Nie można znaleźć aplikacji Cloud Storage Api per sey, ale dodanie do niej aplikacji json api w chmurze wymieniono tam dla mnie – jai

1

Jedną z możliwych przyczyn tego problemu jest brak bibliotek wymaganych przez bibliotekę GCS. Gdy Google stwierdza w swoich dokumentach, że potrzebujesz 1) Guava, 2) Joda-Time, 3) Biblioteka klienta Cloud Storage API - nie żartują.

Problem polega na tym, że nie potrzebujesz tych bibliotek, aby uruchomić aplikację na serwerze dev. Twoja aplikacja będzie działać dobrze lokalnie. Kiedy jednak prześlesz go do Google, otrzymasz NoClassDefFoundError z niepoprawną wiadomością: zgłosi ona OAuthRawGcsServiceFactory lub może URLFetchUtils, mimo że brakujące klasy są w Joda lub CS API.

Po dodaniu wszystkiego, czego wymaga Google, twój projekt (miejmy nadzieję) zadziała. Pobierz linki do tych bibliotek można znaleźć na stronie Dokumenty Appengine: https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/download.

Powiązane problemy