Java Play Mustache NPE错误

Java Play Mustache NPE错误,java,playback,mustache,Java,Playback,Mustache,我们在生产(AmazonLinuxEC2AMI)中遇到了一个小胡子播放错误,但在开发(MACs)中没有。我们尝试升级jvm,改用jdk,并从tomcat部署模型更改为尽可能匹配我们的开发环境,但没有任何效果。如果您有任何帮助,我们将不胜感激。我们在java和javascript中有很多使用mustache的共享代码,如果我们不得不在java方面放弃mustache,那么重写所有内容将是一件大事 20:48:52403错误~ @6al2dd0po Internal Server Error (50

我们在生产(AmazonLinuxEC2AMI)中遇到了一个小胡子播放错误,但在开发(MACs)中没有。我们尝试升级jvm,改用jdk,并从tomcat部署模型更改为尽可能匹配我们的开发环境,但没有任何效果。如果您有任何帮助,我们将不胜感激。我们在java和javascript中有很多使用mustache的共享代码,如果我们不得不在java方面放弃mustache,那么重写所有内容将是一件大事

20:48:52403错误~

@6al2dd0po
Internal Server Error (500) for request GET /mystuff/people

Execution exception (In {module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java around line 32)
NullPointerException occured : null

play.exceptions.JavaExecutionException
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:90)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
    at play.templates.Template.render(Template.java:26)
    at play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
    at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
    at play.mvc.Controller.renderTemplate(Controller.java:660)
    at play.mvc.Controller.renderTemplate(Controller.java:640)
    at play.mvc.Controller.render(Controller.java:695)
    at controllers.MyStuff.people(MyStuff.java:183)
    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)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.modules.mustache.MustacheTags._template(MustacheTags.java:32)
    at play.modules.mustache.MustacheTags$_template.call(Unknown Source)
    at /app/views/User/people.html.(line:22)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
    ... 13 more
@6al2dd0po
请求GET/mystuff/people的内部服务器错误(500)
执行异常(在第32行附近的{module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java中)
发生NullPointerException:null
play.exceptions.JavaExecutionException
play.templates.BaseTemplate.throweException(BaseTemplate.java:90)
play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
play.templates.Template.render(Template.java:26)
play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
play.mvc.results.RenderTemplate.(RenderTemplate.java:24)
play.mvc.Controller.renderTemplate(Controller.java:660)
play.mvc.Controller.renderTemplate(Controller.java:640)
play.mvc.Controller.render(Controller.java:695)
atcontrollers.MyStuff.people(MyStuff.java:183)
atplay.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
atplay.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
atplay.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
在Invocation.HTTP请求时(播放!)
原因:java.lang.NullPointerException
play.modules.mustache.MustacheTags.\u模板(MustacheTags.java:32)
play.modules.mustache.MustacheTags$\u template.call(未知源)
位于/app/views/User/people.html(第22行)
play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
... 还有13个

您的问题很难重现,因此我将在这里给出几点提示。您已尝试消除环境问题。因此,其他可能的问题可能是

  • 数据问题:很多时候,生产问题的原因通常是实际数据和测试数据的差异。检查是否存在导致NPE的数据问题

  • 代码问题:在
    people.html(第22行)
    中是否有什么东西导致了问题。首先尝试删除/更改该选项,以检查是否是该选项导致了问题。或者您可以获得
    mustache
    (您正在使用的确切版本)的源代码,并查看它试图创建的对象以及失败的地方

  • 不同环境的属性文件:每个环境有不同的属性文件吗?如果是,您是否错过了prod env的任何属性


  • 在MustacheTags.java的第32行有一个NullPointerException

    这意味着您可能正在调用Mustache库的方法并传递空值。 尝试记录传输到此方法的所有参数(MyStuff.java第183行?)


    您可以查看MustacheTags的源代码,它可能会帮助您了解正在传递的值和应该传递的值。

    问题似乎出在threadlocal上。在Prod中,根据我的日志,会话将使用主线程初始化

         [2012-06-30 18:35:38,102] INFO 10097[**main**] - Mustache module initialized
    
    但是,MustacheTag会在请求期间尝试使用各种线程进行访问

         [2012-06-30 17:48:44,669] INFO 66048[**play-thread-1**] - [{module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java:46] _meta() :: MustachePlugin.session():null
    
    所以我对MustachePlugin的实现做了如下更改。更改后的行注释为:

        //private static ThreadLocal<MustacheSession> session_ = new ThreadLocal<MustacheSession>();
        private static MustacheSession _session = null;
        public static MustacheSession session(){
        //return session_.get();
        return _session;
        }
        public void onConfigurationRead(){
        // some code
        _session = new MustacheSession(compiler, root);
        // some code
        }
    
    //私有静态ThreadLocal会话=新ThreadLocal();
    私有静态MustacheSession _session=null;
    公共静态MustacheSession会话(){
    //返回会话(get();
    返回会话;
    }
    配置读取()时出现公共无效{
    //一些代码
    _会话=新的MustacheSession(编译器,根);
    //一些代码
    }
    

    现在它在prod模式下运行良好!当会话在启动时初始化时,我看不出为什么它首先应该在ThreadLocal中

    你能发布相关代码吗?我猜你的模板没有加载。thx这看起来很有希望。我正在编辑MustachePlugin.java文件来尝试这一点,但我对java文件所做的更改似乎没有生效。如何使用我的更改再次编译模块,以便play在重新启动后拾取它们?只需直接更新modules/mustache-0.2/lib/play-mustache.jar中的类文件即可测试您的更改!好的,我为模块运行了ant构建,它更新了lib。看起来不错的程序员!我还将在mustache插件github中发布关于该问题的结果。如果有人感兴趣,这里是该问题的链接: