2011-12-18 3 views
1

私はスプリングジャージを使用して休憩サービスを公開しています。私のweb.xmlは次のようになります:スプリングジャージー複数の状況でサービスを公開する方法

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

標準といえましょう。 私は多くのパッケージでたくさんの休憩サービスを持っています。私は2つの文脈でそれらを結びつける必要があります。「基本」と「高度な」サービスを言います。さらに、url-patternの "rest"接頭辞を取り除く必要があります。だから、私は2つのパッケージにグループについてのそれらを考えた後、web.xml内com.sun.jersey.config.property.packagesと2つのジャージーサーブレットを定義するのparamを初期化:残念ながら原因のApplicationContext内のコンポーネントスキャンセットに

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.example.app.rest.base</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/base/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>Another Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.example.app.rest.advanced</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Another Jersey REST Service</servlet-name> 
    <url-pattern>/advanced/*</url-pattern> 
</servlet-mapping> 

。 XML

<context:component-scan base-package="com.example.app" /> 

財産com.sun.jersey.config.property.packagesは無視されます(残りのすべてのサービスは、各コンテキストでアクセスすることができます)、それはそのように扱うことができません。

私は他の方法でそれをどのように処理できるのだろうかと思っています。私がしたくないことは、設定することだけです。

<url-pattern>/*</url-pattern> 

すべてがキャッチしています。

答えて

1

複数のパッケージを指定できます。コンマで区切ります。

<context:component-scan base-package="com.example.app,com.sun.jersey" /> 

また、2つのコンポーネントスキャン項目を定義することもできます。これらの項目も同様に機能するはずです。

パッケージの差別化が役立たない場合は、filterを使用してください。

<context:component-scan base-package="org.example"> 
     <context:include-filter type="regex" expression=".*Repository"/> 
    </context:component-scan> 

そして、ちょうど各サービスのための別個のApplicationContextを行うが、そのアプリケーションのコンテキストの位置/名前のcontextConfigLocationのINIT-PARAMとinit値を使用します。そのため、特定のアプリケーションコンテキストを各サービスにロードするようにすると、コンポーネントスキャンフィルタリングは、1つのサービスに必要なものすべてをロードし、もう1つは除外します。

<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>WEB-INF/rest-service1.xml</param-value> 
</init-paraam> 

実際には、それぞれ別のXMLファイルを作成すると、その時点で別のパッケージを使用することに戻すことができます。

+0

参照:http://stackoverflow.com/questions/5269450/multiple-packages-in-contextcomponent-scan-spring-config – AHungerArtist

+0

問題は、すべてのレストサービスが利用できるようにベースパッケージが設定されていることです両方の状況下で – Espeen

+0

フィルタを試すことができます。 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-scanning-filters – AHungerArtist

関連する問題