(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

OGNL式で存在しないプロパティへアクセス

先程まで、OGNL式の謎の例外に悩まされていたのですが、

Caused by: java.lang.NullPointerException
	at com.opensymphony.xwork2.ognl.OgnlValueStack.checkForInvalidProperties(OgnlValueStack.java:298)
	at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:237)
	at org.apache.struts2.components.Component.findValue(Component.java:248)
	at jp.root42.r42fw.export.web.ui.components.SetLocal.end(SetLocal.java:48)
	... 311 more

やっと解決しました。
これは、Beanに存在しないプロパティへアクセスしたときに出るエラーみたいです。
僕はこのような状況で発生しました。


Beanクラス

public class Hoge {
    private String foo;

    //本来ならgetFooとすべきなのにミスしている箇所
    public String getBar() {
        return foo;
    }
}

JSPファイル

<s:set var="hogeBean" var="..." />

<s:property value="#hogeBean.foo" /> ← ここでエラー


ところで、OgnlValueStack#checkForInvalidPropertiesのJavadocにはこう書いてありました。

/**
 * This method looks for matching methods/properties in an action to warn the user if
 * they specified a property that doesn't exist.
 *
 * @param expr the property expression
 */
private void checkForInvalidProperties(String expr) {
    ...
}

わざわざ警告メッセージを出してあげようとしているのに、それに失敗して例外を吐くとは本末転倒な気が。
まあ、バグを出した僕が悪いのだけども(=_=)