SpringFrameworkとの連携
JerseyとSpringとの連携について、Jerseyには、Springとの連携用のサーブレットクラスがあるので、それを使います。
web.xmlにSpringとの連携用のサーブレットの設定とSpringのリスナーを設定します。
Springの設定は、通常と同じく、listenerとconfigを下記の様に記述するだけです。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/spring/applicationContext.xml</param-value> </context-param>
その後に、JerseyのSpringとの連携用のサーブレットを記述してweb.xmlの設定は、完了です。
<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.resorceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-para> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jp.co.dev.system.service</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/MessageResource/*</url-pattern> </servlet-mapping>
呼び出されるRESTサービスクラスに@Componentか@Serviceをつけます。
どっちを使うかは、機能的にどっちでも問題ありません。
@Serviceを使った場合は、下記の様になります。
package jp.co.dev.system.service; import javax.ws.rs.Get; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Service; @Path("/service") @Service("messageResource") public class MessageResoruce { @GET @Path(value="/getMessageByMessageId") @Produces(MediaType.TEXT_XML) public MessageResponse getMessageByMessageId( .......
これで、上記のクラスに対して、ロジッククラスなどを下記の様な感じで、Autowireさせることができます。
@Path("/service") @Service("messageResource") public class MessageResoruce { @Autowired @Qualifier("messageResourceLogic") MessageResourceLogic messageRsourceLogic; @GET @Path(value="/getMessageByMessageId") @Produces(MediaType.TEXT_XML) public MessageResponse getMessageByMessageId( @QueryParam("messageId") String messageId) throws ApplicationFaultException,SystemFaultException { MessageResponse response = messageResourceLogic.getMessageId(messageId); return response; }