[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 メーリングリストの案内