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 {
}
}
No.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;
}
ご指摘の通り context がnullとなっておりNullPointerExceptionが
発生しておりました。
従って、Staticイニシャライザの中で読み込むファイルの絶対パスを取得する
のはあきらめることにして
イニシャライザの中ではResourceBundleクラスを使ってプロパティファイルの
中身を読み込むことにしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構造 他のクラスの構造体を別...
-
クラス間でのデータ参照
-
Java リフレクションについて
-
関数内の変数に<summary>コメン...
-
C#のクラスライブラリでメッセ...
-
C#にて別クラスの関数を使いたい
-
C# log4netの使い方
-
Genericsの型パラメータ
-
[C#]XMLシリアライズ:配列が入...
-
c++,ある関数のクラスから別の...
-
違うクラスのデータを読み込む...
-
a href="..." とServlet
-
eclipse3.0 元に戻す最大回数...
-
C++でfriendクラスにしているの...
-
Struts2でのStaticイニシャライザ
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
EXCEL VBAにて動的にCheckBOXを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
無名パッケージからのインポート
-
java-別クラスの変数の使い方を...
-
SwingでgetContentPaneのエラー...
-
C++でfriendクラスにしているの...
-
C#でほかのファイルにある自作...
-
Java リフレクションについて
-
Java
-
import と extends について
-
C#のクラスライブラリでメッセ...
-
a href="..." とServlet
-
ひとつのファイルにクラスは1つ?
-
構造 他のクラスの構造体を別...
-
親クラスから子クラスへアクセス。
-
内部クラスのインスタンスを外...
-
visual studioのデザイナ画面で...
おすすめ情報