[Seasar-user:4436] Re: S2StrusのClassFinderImpl#findについて
Katsuhiko Nagashima
[E-MAIL ADDRESS DELETED]
2006年 8月 28日 (月) 23:52:45 JST
永島です。
> ServletContext#getRealPathに依存しないような対応は可能でしょうか?
ServletContext#getResource()ではないですが、
S2のComponentAutoRegisterのようにReferenceClassを指定し、
クラスを読み込む読み込む機能を追加し、以下にコミットしました。
https://www.seasar.org/svn/s2struts/branches/s2struts-1.2.3-branch/
AutoStrutsConfigRegisterPlugInでreferenceClassを指定すれば利用できます。
<plug-in className="org.seasar.struts.plugin.AutoStrutsConfigRegisterPlugIn">
:
<set-property property="referenceClass"
value="org.seasar.struts.examples.FowardNameConstants"/>
:
</plug-in>
次回(1.2.6)リリース時に反映されます。
よろしくお願いします。
06/08/28 に 齋藤 宗範<[E-MAIL ADDRESS DELETED]> さんは書きました:
> お世話になっております。
> 齋藤といいます。
>
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://www.seasar.org/mailman/listinfo/seasar-user
>
--
Katsuhiko Nagashima
Seasar-user メーリングリストの案内