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