2011-01-11 8 views
3

私はWebサービスを作成するためにSpring-WSを使用しています。私のプロジェクトでは、私の/src/main/resourceフォルダにあるサンプルレスポンスとリクエストXMLファイルを読むためのHelperクラスを作成しました。spring-wsのアプリケーションコンテキストパスを取得するには?

私のWebサービスアプリケーションを「ローカル」でユニットテストするときには、System.getProperty("user.dir")を使用してアプリケーションコンテキストフォルダを取得します。以下は、Helperクラスで作成したメソッドで、自分のリソースフォルダに興味のあるファイルを取得するのに役立ちます。

public static File getFileFromResources(String filename) { 
    System.out.println("Getting file from resource folder"); 
    File request = null; 
    String curDir = System.getProperty("user.dir"); 
    String contextpath = "C:\\src\\main\\resources\\"; 
    request = new File(curDir + contextpath + filename); 
    return request; 
} 

しかし、Apache Tomcatのディレクトリに../webappsフォルダに「出版」コンパイルWARファイルをした後、私はSystem.getProperty("user.dir")は、もはや自分のアプリケーションのコンテキストパスを返すことを実現していません。示すように代わりに、それは、Apache Tomcatのルートディレクトリを返している

C:\プログラムファイル\ Apache Software Foundationの\ Tomcatの6.0は\メイン\リソース\ SampleClientFile

を\私はいずれかを見つけるように見えるカントSRC私のWebサービスのルートフォルダを取得する方法についての情報

request.getSession().getServletContext().getContextPath() 

しかし、この場合には、私がリクエストで、サーブレットコンテキストがある春のWebアプリケーションを使用しています:私は、私は次のように使用してコンテキストパスを取得することができます春のWebアプリケーションの例を見てきました。しかし、Spring-WSでは、私のエントリーポイントはエンドポイントです。 Webサービスアプリケーションのコンテキストパスを取得するにはどうすればよいですか。

私は何か

のようなCのコンテキストパスを期待しています:\プログラムファイル\ Apache Software Foundationの\ Tomcatの6.0 \ webappsに\ clientWebService \ WEB-INF \クラス

誰かがお勧めでしたがこれを達成する方法?

答えて

2

あなたはRequestContextHolderから、現在の要求を取得することができます。

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); 

少し不格好が、ここでは、おそらくあなたの最良の選択肢。

+0

これはちょっと大変ですが、それは私たちのために働きます。 – PointZeroTwo

0

あなたのアプリケーションが実際にフォルダ内にあることや、コードがファイルシステムの任意の部分を探索できることは保証されていないと思います。アプリケーションサーバーの中には、warファイルを爆発させないものがあります。アプリケーションの場所は、実際にはアーカイブファイル自体の内部にあります。

ただし、どこにあるかにかかわらず、アプリケーション自体内のリソースを読み込むことはできます。 ServletContextでは、たとえばjavax.servlet.ServletContext#getResourceAsStreamを使用してこれを行うことができます。アプリケーションのコンテキストパスも(リクエストパスの場合と同様に)見つけることができます。

あなたのbeanにorg.springframework.web.context.ServletContextAwareを実装することで、サーブレットコンテキストにアクセスできます。

関連する問題