Problems trying to add a filter to a Grizzly+Jersey app

只愿长相守 提交于 2020-01-14 13:37:28

问题


I have this server initialization class:

package magic.app.main;

import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

import java.io.IOException;
import java.net.URI;

public class Main {
    public static final String BASE_URI = "http://localhost:4747/";

    public static void main(String[] args) throws IOException {
        /* SOME NON-RELEVANT CODE UP HERE */

        final ResourceConfig rc = new ResourceConfig();

        rc.packages("magic.app.resource");
        rc.register(magic.app.main.CorsSupportFilter.class);

        final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI),rc);

        /* SOME NON-RELEVANT CODE DOWN HERE */
    }
}

And this filter class which I'm trying to register in the initialization class:

package magic.app.main;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

public class CorsSupportFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) {

        ResponseBuilder resp = Response.fromResponse(contResp.getResponse());
        resp.header("Access-Control-Allow-Origin", Configuration.getHttpAllowOrigin())
            .header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");

        String reqHead = req.getHeaderValue("Access-Control-Request-Headers");

        if(null != reqHead && !reqHead.equals(null)){
            resp.header("Access-Control-Allow-Headers", reqHead);
        }

        contResp.setResponse(resp.build());
        return contResp;
    }

}

When I run the app I get this piece of log:

WARNING: A provider magic.app.main.CorsSupportFilter registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider magic.app.main.CorsSupportFilter will be ignored.

I'm working with gradle and this is my app's Gradle build file:

apply plugin: 'java'

repositories{
    mavenCentral()
}

dependencies{
    // IP2C
    compile fileTree(dir: 'libs', include: '*.jar')

    // Jersey + Grizzly
    compile 'org.glassfish.jersey:jersey-bom:2.4.1'
    compile 'org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.4.1'

    // Jersey
    compile 'com.sun.jersey:jersey-core:1.17.1'
    compile 'com.sun.jersey:jersey-server:1.17.1'

    // JSON
    compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'org.codehaus.jackson:jackson-xc:1.9.13'
    compile 'com.googlecode.json-simple:json-simple:1.1.1'

    // Jersey + JSON
    compile 'com.sun.jersey:jersey-json:1.17.1'
    compile 'com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.3.0-rc1'

    // Postgres
    compile 'com.jolbox:bonecp:0.8.0.RELEASE'
    compile 'postgresql:postgresql:9.1-901-1.jdbc4'

    // Mail
    compile 'javax.mail:mail:1.5.0-b01'
}

回答1:


You're mixing 2 versions of Jersey (1.x and 2.x) in your app. In your Main class you're using Jersey 2.x (package prefix is org.glassfish.jersey) and your ContainerResponseFilter is an implementation of Jersey 1.x proprietary API.

If you want to use Jersey 2.x the filter should implement ContainerResponseFilter from JAX-RS 2.0.

In case you want to stick with Jersey 1.x you should change registration in your Main class (and also use grizzly container module from Jersey 1.x):

final ResourceConfig rc = new PackagesResourceConfig("magic.app.resource");
rc.getContainerResponseFilters().add(CorsSupportFilter.class);


来源:https://stackoverflow.com/questions/19920119/problems-trying-to-add-a-filter-to-a-grizzlyjersey-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!