Как получить приложение jersey 1.x с помощью guice? - PullRequest
0 голосов
/ 11 февраля 2019

Я использую пример jersey 1.x для интеграции с guice.

https://github.com/jersey/jersey-1.x/tree/master/samples/jersey-guice-filter.

Я хочу запустить этот образец со встроенным откатом.

Iсоздал класс Main с кодом ниже

Я попытался настроить код для зеркалирования web.xml.Сервер undertow запускается, но когда я пытаюсь попасть в конечную точку.Я получаю следующую ошибку

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
    at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
    at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
package com.sun.jersey.samples.guice;

import com.google.inject.servlet.GuiceFilter;
import com.sun.jersey.spi.container.servlet.ServletContainer;
import io.undertow.Handlers;
import io.undertow.Undertow;
import io.undertow.server.handlers.PathHandler;
import io.undertow.servlet.Servlets;
import io.undertow.servlet.api.DeploymentInfo;
import io.undertow.servlet.api.DeploymentManager;
import javax.servlet.DispatcherType;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import static io.undertow.servlet.Servlets.filter;
import static io.undertow.servlet.Servlets.listener;
import static io.undertow.servlet.Servlets.servlet;

public class Main {
    private static final int port = 5000;

    public static void main(String[] args) {
        try {
            new Main().run(port);
        } catch (ServletException e) {
            System.out.println("Failed to start " + e);
        }
    }


    public void run(int port) throws ServletException {


        DeploymentInfo servletBuilder = Servlets.deployment()
                .setClassLoader(Main.class.getClassLoader())
                .setContextPath("/")
                .setDeploymentName("guice-example")
                //.addServlet(servlet( "default", ServletContainer.class).addMapping("/"))
                .addServlet(servlet( "default", new HttpServlet(){}.getClass()).addMapping("/blah"))
                .addFilter(filter("guice", GuiceFilter.class))
                .addFilterUrlMapping("guice", "/*", DispatcherType.REQUEST)
                .addListener(listener(GuiceServletConfig.class));

        DeploymentManager manager = Servlets.defaultContainer().addDeployment(servletBuilder);
        manager.deploy();
        PathHandler path = Handlers.path(Handlers.redirect("/"))
                .addPrefixPath("/", manager.start());

        Undertow server = Undertow.builder()
                .addHttpListener(port, "localhost")
                .setHandler(path)
                .build();
        server.start();
    }
}

Я ожидал, что это запустится и найдет все ресурсы JAX-RS и позволит мне попасть в конечные точки.Я пробовал несколько вариантов использования ServletContainer.class для сервлета по умолчанию.Но я получаю ошибки, связанные с введением хитрости классов.

Есть ли способ научиться хорошо играть с guice и jersey 1.x?

...