[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 メーリングリストの案内