间歇性Grails异常:MissingMethodException

时间:2015-05-14 23:42:24

标签: grails

我们的生产系统和一些测试系统存在问题。我们在视图中出现间歇性的Grails异常。

  

没有方法签名:static org.apache.commons.lang.StringUtils.isNotBlank()适用于参数类型:(null)values:[null]可能的解决方案:isNotBlank(java.lang.String),isBlank( java.lang.String中)

错误似乎表明Grails似乎无法弄清楚它应该使用StringUtils.isNotBlank(String)应该在传递null时使用。

我们注意到:

  • 关于生产,问题出现了,并且花了超过12个小时才看起来神奇地消失了。搜索日志似乎表明没有重启。
  • 开发人员在早上看到测试系统没有问题。几个小时后,他能够重现它。为了解决这个问题,我们重启了Tomcat。

我不确定Grails版本是什么或如何检查它。如果您在下面评论如何找到它,我很乐意使用Grails版本编辑问题。

  • 是什么导致这种情况,有没有办法可靠地重现它?
  • 有可靠的解决方法吗?

3 个答案:

答案 0 :(得分:0)

我可以通过运行:

在控制台中重现这一点
org.apache.commons.lang.StringUtils.isNotBlank((Object)null) => Your Error

传递null只允许编译器将null强制转换为String:

org.apache.commons.lang.StringUtils.isNotBlank(null) => false

传入的任何内容都可能是严格类型为String以外的其他内容但是为null。 Groovy编译器非常聪明地强制类型,但我已经看到它在一些简单的情况下爆炸了。如果使用@CompileStatic和/或使用本机Java对象,则尤其如此。

答案 1 :(得分:0)

一个可靠的解决方法是我们重新启动应用程序。

可怕的答案,我知道。我每次都觉得很脏。

答案 2 :(得分:0)

我最近也经历过这一点。事实证明,我们有一段代码在Long中传递给StringUtils.isNotEmpty()。对此方法进行的每个后续调用都具有String值null,并使用相同的MissingMethodException进行错误。

您可以通过执行...

轻松复制此内容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.1"
        android:orientation="horizontal">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.7"
        android:orientation="horizontal">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.2"
        android:background="@android:color/transparent">

    </LinearLayout>

</LinearLayout>

在剪切上面的BOTH调用中出错。