Java GMail api - java.lang.VerifyError:无法从最终类

时间:2017-10-29 20:38:48

标签: java java-ee glassfish gmail gmail-api

我使用带有Java JDK 1.8的glassfish服务器4.1。我使用maven来构建和部署。

我创建了一个表单,触发控制器使用gmail api发送电子邮件。

触发控制器的表单:

<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>

控制器&#34; Gmail控制器&#34;:

@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();
    }
}

}

调用GMail API函数的sendAnEmail方法:

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@example.com", msg);

}

当我提交触发控制器的表单时,我收到HTTP 500错误并且glassfish显示:

  

java.lang.VerifyError:无法从最终类继承

当我在java glassfish web应用程序之外测试GMail API时,它通过在java main中调用sendAnEmail来正常工作。

我不明白导致此错误的原因是因为我的班级不会从HttpServlet以外的任何其他班级继承。

当我评论sendAnEmail()调用时,没有错误,因此错误不应该是因为HttpServlet继承。

导致此错误的原因是什么? 我如何调试或获取更多有关它的信息?

在server.log中,我没有获得更多信息,它显示相同的错误并告诉线程已经停止。

经过一些测试后,另一台计算机上的完全相同的代码和操作系统给出了:

  

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

相反。

google-api-services-oauth2,google-api-services-gmail和google-api-client都是版本1.23.0。

1 个答案:

答案 0 :(得分:1)

错误:java.lang.VerifyError: Cannot inherit from final class

基于此thread,您已设法创建一个扩展超类的类,其中超类已声明为final

  

最可能的原因是您的构建类路径与启动类路径之间存在冲突。换句话说,您正在针对非final的超类版本编译子类,然后针对final版本运行。验证者(正确地)说这是错误的。

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

基于此forum,您的代码(间接)调用不存在的方法。检查您在类路径中使用的依赖项。

希望这有帮助!

相关问题