0

問題は次のとおりです。

例外で実行されている webapp でメールを送信するPlay framework 1.2.4と、次のスタック トレースがログに記録されます。

Execution exception 
NullPointerException occured : null 

play.exceptions.JavaExecutionException 
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231) 
        at Invocation.HTTP Request(Play!) 
Caused by: java.lang.NullPointerException 
        at play.exceptions.MailException.<init>(MailException.java:27) 
        at play.libs.Mail.buildMessage(Mail.java:79) 
        at play.libs.Mail.send(Mail.java:35) 
        at play.mvc.Mailer.send(Mailer.java:347) 
        at play.mvc.Mailer.sendAndWait(Mailer.java:355) 
        at notifiers.Mails.forgotPassword(Mails.java:19) 
        at controllers.PasswordReset.requestPasswordReset(PasswordReset.java:102) 
        at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548) 
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502) 
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478) 
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473) 
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161) 
        ... 1 more 

ここでの関連部分は次のとおりです。

Caused by: java.lang.NullPointerException 
        at play.exceptions.MailException.<init>(MailException.java:27) 

これは、 (27 行目)NullPointerExceptionのコンストラクターからスローされたことを示します。play.exceptions.MailExceptionこのコンストラクタのソース コードは次のようになります。

public MailException(String message, Throwable cause) {
    super(message, cause);
    StackTraceElement element = getInterestingStrackTraceElement(cause);
    if(element != null) {
        ApplicationClass applicationClass = Play.classes.getApplicationClass(element.getClassName());
        sourceFile = applicationClass.javaFile.relativePath(); // this line is 27th and NPE is thrown from here
        source = Arrays.asList(applicationClass.javaSource.split("\n"));
        line = element.getLineNumber();
    }
}

したがって、applicationClassローカル変数またはjavaFileプロパティのいずれかが null です。奇妙な内部構造に精通している誰かPlay frameworkが、この問題の原因についてアドバイスできますか?

事前にどうもありがとう

Seb Cesbron回答後に編集

play.libs.Mail.buildMessage(Mail.java:79)また、アドレスが nullであることが明確に示されている場所も調べましたがfrom、それを修正した後、同様の例外がポップアップしました。

play.exceptions.JavaExecutionException
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.exceptions.MailException.<init>(MailException.java:27)
    at play.mvc.Mailer.send(Mailer.java:349)
    at play.mvc.Mailer.sendAndWait(Mailer.java:355)
    at notifiers.Mails.forgotPassword(Mails.java:19)
    at controllers.PasswordReset.requestPasswordReset(PasswordReset.java:102)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)

そして、play.mvc.Mailer.sendメソッドにはブロックで囲まれた約200行のコードが含まれているtry-catchため、何が問題なのかを見つけるのは非常に困難でした:)

4

1 に答える 1

1

Mail.java の 79 行目は、From アドレスがないため、スロー MailException を参照しています。

MailException の NullPointerException は、メールに関連付けられたファイルがないことを示しているようです。ファイル Mails/forgotPassword.html (または txt) が存在しますか?

于 2012-11-14T07:40:42.040 に答える