vendredi 3 avril 2015

Spring + Jersey + Filter + @Provider

I tried to configure Jersey with Spring using just annotations. I annotated my resource classes with @Path and @Component annotations. Everything worked fine until I tried to configure some filters. I created filter like this:



@Service
@Provider @PreMatching
public class MyFilter implements ContainerRequestFilter {

public MyFilter() {
System.out.println("MyFilter()");
}

@Override
public ContainerRequest filter(ContainerRequest request) {
System.out.println("filtered");
return request;
}
}


It looks like bean is created and filter is registered in Jersey as when calling the resource I see:



INFO: Registering Spring bean, myFilter, of type pl.igt.filter.MyFilter as provider class


next to info about registration of resource components. I can call my resources and it works fine, but filter is never used actually.


web.xml:



<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://ift.tt/nSRXKP" xmlns:xsi="http://ift.tt/ra1lAU" xsi:schemaLocation="http://ift.tt/nSRXKP http://ift.tt/LU8AHS">
<display-name>IGT</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.filter.DelegatingFilterProxy</listener-class>
</listener>

<!-- jersey 1.x -->
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<!--
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>pl.igt.filter.MyFilter</param-value>
</init-param>
-->
</servlet>

<!-- jersey 2.x
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>pl.igt.rest.JerseyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
-->

<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


applicationContext.xml:



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://ift.tt/GArMu6"
xmlns:xsi="http://ift.tt/ra1lAU"
xmlns:context="http://ift.tt/GArMu7"
xmlns:aop="http://ift.tt/OpNdV1"
xmlns:ehcache="http://ift.tt/1nlfGcD"
xsi:schemaLocation="http://ift.tt/GArMu6 http://ift.tt/18sW2ax
http://ift.tt/GArMu7 http://ift.tt/1bGeTcI
http://ift.tt/OpNdV1 http://ift.tt/QEDs1g
http://ift.tt/1nlfGcD http://ift.tt/1nlfGt5">

<context:annotation-config />
<context:component-scan base-package="pl.igt.rest" />
<context:component-scan base-package="pl.igt.filter" />
</beans>

Aucun commentaire:

Enregistrer un commentaire