[Seasar-user:17861] Re: [teeda] ForEach で NullPointerException

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 26日 (金) 02:02:15 JST


小林 (koichik) です.

Date:    Fri, 26 Jun 2009 00:55:47 +0900 (JST)
From:    <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17860] [teeda] ForEach で NullPointerException

> teedaでForEachで例外が発生する場合があります。
> 原因等わかりますでしょうか。
(略)
> 【スタックトレース】
> 一部独自クラスを「#」でマスクしています。
> ・パターン1
> java.lang.NullPointerException
> 	at
> org.seasar.framework.beans.impl.BeanDescImpl.hasPropertyDesc(BeanDescImpl.java:126)

ソースを見る限り,この場所で NPE が発生することは
あり得ないはずです.
実際のコードは

        return propertyDescCache.get(propertyName) != null;

となっていて,フィールド propertyDescCache は

    private CaseInsensitiveMap propertyDescCache = new CaseInsensitiveMap();

と初期化子でインスタンスを設定した後はどこでも
更新していないので,null になることもありません.

> ・パターン2
> java.lang.NullPointerException
> 	at
> org.seasar.framework.util.CaseInsensitiveMap.get(CaseInsensitiveMap.java:58)

こちらも同様です.
該当のコードは

        return super.get(convertKey(key));

となっていて,ここでは NPE は発生しません.

WebLogic をお使いということなので,JVM は 
JRockit なのだと思いますが,最適化によって
正確な例外の発生位置が分からなくなったり
するのでしょうか?

実際に NPE が発生している場所が分からないと
調査が難しいので,JRockit の最適化の設定を
変えるなどして NPE が本当に発生した場所を
取得できるようにするか,Sun JDK + Tomcat でも
再現するサンプルを提供してもらえると助かります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内