[Seasar-user:4434] S2StrusのClassFinderImpl#findについて

齋藤 宗範 [E-MAIL ADDRESS DELETED]
2006年 8月 28日 (月) 19:32:35 JST


お世話になっております。
齋藤といいます。

S2StrutsをWeblogic 9.2で使用したいとおもっております。
weblogic 9.2でwarファイルをデプロイすると、デプロイジにnullPointerException
が
発生します。

具体的にはS2StrusのClassFinderImpl#find(GenericServlet servlet, boolean
enableJar, String pattern)
で使用しているServletContext.getRealPathがnullを返すためです。
APIを参照すると確かにwarをデプロイする場合はnullが返るとなっております。

http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletContext.html#getR
ealPath(java.lang.String)

    public void find(GenericServlet servlet, boolean enableJar, String
pattern) {
        String classesDirPath =
servlet.getServletContext().getRealPath(WEB_CLASSES_DIR);
        find(classesDirPath, enableJar, pattern);

        String libDirPath =
servlet.getServletContext().getRealPath(WEB_LIB_DIR);
        File[] files = new File(libDirPath).listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                find(files[i], enableJar, pattern);
            }
        }
    }

ためしにgetRealPathを使用せずに、getReaourceメソッドを使用してURLを取得し、
そこからgetPathで「/WEB-IND/classes、/WEB-INF/lib」のパスを取得したところう
まく動きました。
public void find(GenericServlet servlet, boolean enableJar, String pattern)
{
	URL classesURL = null;
	URL libURL = null;
	try {
		classesURL =
			servlet.getServletContext().getResource(WEB_CLASSES_DIR);
		libURL =
			servlet.getServletContext().getResource(WEB_LIB_DIR);
	} catch (MalformedURLException e) {
		//TODO something
	            return;
	}

        String classesDirPath = classesURL.getPath();
        find(classesDirPath, enableJar, pattern);

        String libDirPath = libURL.getPath();
        File[] files = new File(libDirPath).listFiles();
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                find(files[i], enableJar, pattern);
            }
        }
}

ServletContext#getRealPathに依存しないような対応は可能でしょうか?

お忙しい中お手数ですが、
ご回答よろしくお願いいたします。




Seasar-user メーリングリストの案内