時々 NullPointerException をスローするコードがあります。これまでのところ、あまり面白くありません。しかし、オブジェクトを参照しない行で例外が発生します。
try
{
parser.parse(input);/*line 186*/
}
catch(Exception e)
{
//NPE happens in the next line?
throw new SAXException("Error parsing document", e);/*line 190*/
}
ここでスタックトレース
java.lang.NullPointerException
at com.tejoe.MyXMLParser.parse(MyXMLParser.java:190)
at com.tejoe.MyXMLParser.parse(MyXMLParser.java:168)
....
過去 3 か月間に発生したのは 2 回だけで、コードは少なくとも 10 万回実行されました。
行情報が正しいことを確認するために、すでにコードを逆コンパイルしました。
追加テスト
SAXException には何か特別なものがあるようです。次のテストを行いました。
import org.xml.sax.SAXException;
public class Test
{
public static void main(String[] args) throws Exception
{
new SAXException("Error", new NullPointerException()).printStackTrace();
}
}
次の出力を得ました
java.lang.NullPointerException
at Test.main(Test.java:7)
Caused by: java.lang.NullPointerException
... 1 more
解決策: SAXException は toString メソッドをオーバーライドして、原因となる例外の名前を返します。
本番環境(AIX JAVA)で出力が原因で発生しなかったことだけが不思議です