Tomcat 7 で実行されている Web アプリケーションがあり、クラスの 1 つで、WEB-INF/lib フォルダーの下の jar の 1 つでファイルを読み込もうとしています。
URL resourceURL = MyClass.class.getClassLoader().getResource("xml/xslt/master.xsl");
File xslfile = new File(resourceURL.getPath());
AssertUtil.assertTrue(xslfile.exists(),"xsl file not found");
MyClass と master.xsl の両方が同じ jar に存在し、パッケージ化に問題はありません。xslfile.exists
しかし、上記のスニペットは falseを返すため、アサーション ステートメントで失敗します。以下に示すように、URL は jar 内のファイルの場所に正しく解決されます。
file:/<MY_WEBAPP_LOCATION>/MyApp/WEB-INF/lib/MyComponent.jar!/xml/xslt/master.xsl
ここで、MY_WEBAPP_LOCATION は、Tomcat サーバーの webapp ディレクトリへの絶対パスに対応します。
しかし、入力ストリームとして読み取るようにコードを次のように書き直すと、正常に動作します。
InputStream xslFile = MyClass.class.getClassLoader().getResourceAsStream("xml/xslt/master.xsl");
入力ストリームの作成は完全に正常に機能しているのに対し、jar リソースからのファイルの作成を妨げている原因を誰でも説明できますか。jar 内のファイルを読み取るために、Tomcat 側から必要な追加の権限設定はありますか?
編集: ファイルが WEB-INF/classes の下に配置されている場合、上記のコードを使用したファイルの作成は正常に機能します。問題は、WEB-INF/lib の下の jar に配置されている場合のみです。