Murugesan M
Murugesan M

Reputation: 231

In jersey 2.x filter implementation does not work?

While i am trying to add response header by implementing ContainerResponseFilter.but it does not work.

Java code :-

public class PoweredByResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext,
        ContainerResponseContext responseContext) throws IOException {
    responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
}

 }

Deployment descriptor :-

<?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Filters</display-name>
<servlet>
    <servlet-name>Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>org.jersey</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classes</param-name>
        <param-value>org.jersey.filter.PoweredByResponseFilter,org.jersey.filter.AuthorizationRequestFilter</param-value>
    </init-param>

</servlet>
<servlet-mapping>
    <servlet-name>Application</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>login.html</welcome-file>
</welcome-file-list>
 </web-app>

Response header :-

enter image description here

New descriptor :-

i change my descriptor to                                                                            <servlet>
    <servlet-name>Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>org.jersey</param-value>
    </init-param>

</servlet>
<servlet-mapping>
    <servlet-name>Application</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>        

Upvotes: 1

Views: 1077

Answers (1)

Paul Samsotha
Paul Samsotha

Reputation: 209112

You have the init-param name wrong. This

jersey.config.server.provider.classes

should be

jersey.config.server.provider.classnames

See here.

Another thing you could've done is simply annotate the filter class with @Provider. As long as the class is in the package (or sub-package) listed in jersey.config.server.provider.packages, it will be picked up and automatically registered.

For example if the filter is annotated with @Provider it is in the org.jersey or org.jersey.filters or org.jersey.foo.filters, be default it will be picked up and registered. This way you don't need to explicitly list it in the xml configuration.

Upvotes: 2

Related Questions