2017-10-29 1 views
0

Ich benutze Glassfish Server 4.1 mit Java JDK 1.8. Ich benutze Maven zum Erstellen und Bereitstellen.Java GMail api - java.lang.VerifyError: Kann nicht von der finalen Klasse erben

Ich machte ein Formular, das einen Controller auslöst, um eine E-Mail mit Gmail API zu senden.

Die Form, die den Controller löst:

<form method="post" action=GmailController> 
     <td>Test API gmail</td> 
     <td><input name="email" value="${requestScope.get("email")}" /></td> 
     <td><input type="submit" value="Send email" /></td> 
</form> 

Der Controller "GmailController":

@WebServlet("/GmailController") 
public class GmailController extends HttpServlet { 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String email = request.getParameter("email"); 

    try { 
     sendAnEmail("email_body", email, email); //custom method that uses gmail API 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

Die sendAnEmail Methode, die GMail API-Funktionen aufruft:

public static void sendAnEmail(String body, String from, String to) throws Exception { 
    Gmail service = getGmailService(); 
    MimeMessage msg = createEmail(to, from, "Area", body); 
    sendMessage(service, "[email protected]", msg); 

}

Wenn ich das Formular abzuschicken, die den Controller auslöst, erhalte ich einen HTTP-Fehler 500 und Glasfischen angezeigt:

java.lang.VerifyError: Cannot inherit from final class

Wenn ich außerhalb meiner Java Glassfish Web GMail API getestet Anwendung, funktionierte es richtig, indem sendAnEmail in einem Java-Hauptaufruf.

Ich verstehe nicht, was diesen Fehler verursachen kann, da meine Klasse von keiner anderen Klasse als HttpServlet erbt.

Wenn ich den sendAnEmail() Aufruf kommentieren, gibt es keine Fehler, so dass der Fehler nicht wegen HttpServlet Vererbung sein muss.

Was kann diesen Fehler verursachen? Wie kann ich debuggen oder mehr Informationen darüber bekommen?

In server.log bekomme ich nicht mehr Informationen, es zeigt den gleichen Fehler und sagt der Thread wurde gestoppt.

Nach einigen Tests, exakt gleicher Code auf einem anderen Computer und O gibt:

java.lang.NoSuchMethodError: com.google.api.client.util.ClassInfo.getFieldInfos()Ljava/util/Collection;

statt.

google-api-services-oauth2, google-api-services-gmail und google-api-client alle sind version 1.23.0.

Antwort

1

Fehler: java.lang.VerifyError: Cannot inherit from final class

Basierend auf dieser thread, Sie haben es geschafft, eine Klasse zu erstellen, die eine übergeordnete Klasse erweitert, wo die übergeordnete Klasse als final erklärt wurde.

The most likely cause is that you have a conflict between your build classpath and your launch classpath. In other words, you are compiling your subclass against a version of the superclass that is not final , and then running against a version that is final . The verifier is saying (correctly) that this is wrong.

Fehler: java.lang.NoSuchMethodError: com.google.api.client.util.ClassInfo.getFieldInfos()Ljava/util/Collection;

Basierend auf dieser forum, Ihr Code ist (indirekt) Aufruf einer Methode, die nicht existierten. Überprüfen Sie Ihre Abhängigkeiten, die Sie in Ihrem Klassenpfad verwenden.

Hoffe, das hilft!

Verwandte Themen