電子書籍の厳選無料作品が豊富!

Struts2でのインターセプターにてStaticイニシャライザを実行するとエラーになってしまいます。
ファイルの絶対パスを取得しようとしています。
以下がそのコードなのですがTomcat再起動時にイニシャライザが実行され
getRealPath()の部分で例外が発生し、java.lang.ExceptionInInitializerError
が発生します。
同じコードをintercept()メソッド内に記述した場合は例外が発生せず絶対パスを取得することが
できます。どなたか原因及び対処方法がおわかりになられますでしょうか。


public class CheckValueInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;


//ファイルの絶対パスの取得
static {
ServletContext context = ServletActionContext.getServletContext();
String path = context.getRealPath("/WEB-INF/Test.txt");
}


public String intercept(ActionInvocation invocation) throws Exception {

}
}

A 回答 (1件)

staticイニシャライザの初期化順序の問題だと推測されます。



おそらく、CheckValueInterceptorクラスのstaticイニシャライザが呼ばれたとき、
まだServletActionContextクラスが初期化されていないのではないでしょうか。

contextがnullでないか等をチェックしてみてください。

***

staticイニシャライザの初期化順序は必ずしも意図通りとはならないので、注意が必要です。
例えば、以下のプログラムはFooクラスよりも先にTestクラスのstaticイニシャライザが呼ばれるため、
nullと出力されます。

public class Test {
static {
System.out.println(Foo.foo());
}
public static void main(String[] args) {}
}
class Foo {
public static String foo() {
return bar;
}
static {
bar = "Hello, world!";
}
private static String bar = null;
}
    • good
    • 0
この回答へのお礼

ご指摘の通り context がnullとなっておりNullPointerExceptionが
発生しておりました。
従って、Staticイニシャライザの中で読み込むファイルの絶対パスを取得する
のはあきらめることにして
イニシャライザの中ではResourceBundleクラスを使ってプロパティファイルの
中身を読み込むことにしました。

お礼日時:2012/06/17 14:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!