Я использую пример 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?