7

Nach dem Upgrade dieser Fehler angezeigt:VerifyError nach dem Upgrade auf Appengine 1.6.6; Kann nicht Instanz UrlFetchTransport erstellen - google-api-java-Client 1.8.0/1.9.0-beta

java.lang.VerifyError: (class: com/mydomain/server/webservices/OAuth2Utils, method: newFlow signature: ()Lcom/google/api/client/googleapis/auth/oauth2/GoogleAuthorizationCodeFlow;) Incompatible argument to function

nicht sicher, dass dies etwa, aber einige Informationen in Beziehung gesetzt werden, wenn vielleicht meine Umwelt:

Linux N53SV 3.2.0-24-generiC# 38-Ubuntu SMP Di 1. Mai 16.18.50 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux java version "1.6.0_31" Java (TM) SE Laufzeitumgebung (Build 1.6.0_31-b04) Java HotSpot (TM) 64-Bit-Server-VM (Build 20.6-b01, gemischter Modus)

UPDATE:

ich das Problem, auf das Nötigste abgestreift, und es ist wirklich unglaublich. Ich habe eine Klasse BadClassTest erstellt und ich erstelle eine Instanz von BadClassTest in einem Servlet. Als mein BadClassTest wie folgt aussieht:

public class BadClassTest { 

    public BadClassTest() { 
     com.google.api.client.http.HttpTransport HTTP_TRANSPORT = new com.google.api.client.extensions.appengine.http.urlfetch.UrlFetchTransport(); 
    } 

} 

dann Ich kann eine Instanz erstellen.

Als mein BadClassTest sieht wie folgt aus:

public class BadClassTest { 

    com.google.api.client.http.HttpTransport HTTP_TRANSPORT = new com.google.api.client.extensions.appengine.http.urlfetch.UrlFetchTransport(); 

    public BadClassTest() { 
     //com.google.api.client.http.HttpTransport HTTP_TRANSPORT = new com.google.api.client.extensions.appengine.http.urlfetch.UrlFetchTransport(); 
    } 

} 

I kann nicht jetzt eine Instanz von BadClassTest erstellen. Ich laufe in folgenden Ausnahme:

java.lang.VerifyError: (Klasse: com/klawt/server/BadClassTest, Methode: Unterschrift:() V) Bad Typ in putfield/putstatic

+0

Upgrade auf Google-API-Java-Client 1.9.0-Beta; gleiches Problem – koma

+0

Ich hatte JDK Probleme vorher, siehe http://StackOverflow.com/Questions/10034900/appengine-devmode-access-denied-JavaLang-RuntimePermission-AccessClassinp – koma

Antwort

4

Update (6. Juni 2012): planen wir in der nächsten Version der Client-Bibliothek zu beheben Anfang nächste Woche. Wir werden einfach das Paket com.google.api.client.extensions.appengine.http.urlfetch in com.google.api.client.extensions.appengine umbenennen.http

Ursprüngliche Antwort:

wir das Problem herausgefunden: com.google.api.client.extensions.appengine.http.urlfetch.UrlFetchTransport im App Engine SDK enthalten ist in appengine-local -webapis.jar. Diese Klasse ist eigentlich aus Versehen da und in der Tat ist das ganze Glas unnötig. Unsere primäre Empfehlung als Problemlösung besteht darin, dieses Jar einfach aus Ihrer App Engine SDK-Installation zu löschen. Es wird nur auf dem lokalen Entwicklungsserver und nicht in der Produktions-App Engine geladen. Ich habe das selbst noch nicht ausprobiert, aber ein anderer Ingenieur versichert mir, dass es funktionieren sollte. Bitte versuchen Sie es und lassen Sie es mich wissen.

Wenn diese Problemumgehung nicht funktioniert, können Sie versuchen, auf App Engine SDK 1.6.5 herunterzustufen. Das appengine-local-webapis.jar ist neu in 1.6.6, und auch dies ist nur ein Problem für die lokale Entwicklung.

Schließlich, wenn das für Sie nicht funktioniert, wechseln Sie zu NetHttpTransport wie von Koma empfohlen. Es gibt einen Fehler in der Implementierung von App Engine HttpURLConnection (auf der NetHttpTransport basiert), da HTTP-Response-Header durch Kommas aufgeteilt werden. UrlFetchTransport hat dieses Problem nicht. Es ist jedoch unwahrscheinlich, dass dies die meisten Entwickler betrifft, es sei denn, Sie bearbeiten beispielsweise Weiterleitungen und die Weiterleitungs-URL enthält ein Komma. Es sollte kein Problem mit einer Google API sein, außer mit der alten Kalenderdaten-API Version 2 (nicht für die neue Version 3).

Ich arbeite gerade mit dem App Engine-Team zusammen, um sicherzustellen, dass dies in der nächsten Version behoben wird. Das tut mir leid!

1

Ich habe Bestätigung von einem anderen Benutzer in der google-api-java-client group wer in dieses Problem lief. Die Problemumgehung besteht darin, UrlFetchTransport zu löschen und NetHttpTransport zu verwenden, das heutzutage auf AppEngine unterstützt wird.

Ich ersetzte die Implementierung meiner globalen Instanz von HttpTransport durch NetHttpTransport anstelle von UrlFetchTransport, deployed und success.

* UPDATE *

Antwort von Yaniv (google-api-java-client Blei):

UrlFetchTransport soll noch die empfohlene Wahl auf Google App Engine sein. Es gibt einen Fehler in der Google App Engine-Implementierung von HttpURLConnection hinsichtlich der Analyse von HTTP-Headern, während UrlFetch diesen Fehler nicht aufweist. Aber wenn NetHttpTransport für Sie arbeitet, können Sie es weiterhin verwenden.

Allerdings habe ich es ehrlich gesagt nicht mit App Engine 1.6.6 versucht. Ich habe es nur am 1.6.5 versucht. Ich würde wirklich gerne eine Untersuchung darüber sehen, warum es am 1.6.6 fehlschlägt. Eine andere Möglichkeit ist, dass es nicht neu bei 1.6.6 ist, sondern etwas anderes bei der Art, wie Sie Ihre Umgebung einrichten.

+0

Fehlerbericht http://code.google.com/p/googleappengine/Probleme/Detail? id = 7593 – koma

Verwandte Themen