Интеграция Jetty с RESTEasy

Любые ссылки о том, как интегрировать Jetty и RESTEasy? Я как бы застрял, пытаясь настроить RESTEasy с Jetty вместе ... и, похоже, в Интернете нет надежной помощи.

public static void main(String[] args) throws Exception
{
        Server server = new Server(8080);

        WebAppContext context = new WebAppContext();
        context.setDescriptor("../WEB-INF/web.xml");
        context.setResourceBase("../src/webapp");
        context.setContextPath("/");
        context.setParentLoaderPriority(true);

        server.setHandler(context);

        server.start();
        server.join();
}

Мой Web.xml копируется непосредственно с: http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Installation_Configuration.html

Ошибка, которую я получаю, — это HTTP 404, когда я пытаюсь открыть ссылку в своем файле ресурсов. На первый взгляд все выглядит разумно, есть предложения?

Мой файл ресурсов выглядит так:

package webapp;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/*")
public class Resource {

   @GET
   public String hello() {
       return "hello";
   }


   @GET
   @Path("/books")
   public String getBooks() {
       return "books";
   }

   @GET
   @Path("/book/{isbn}")
   public String getBook(@PathParam("isbn") String id) {
       return "11123";
   }
}

Это отпечатки, которые я вижу, когда Jetty запускается:

2012-04-10 09:54:27.163:INFO:oejs.Server:jetty-8.1.1.v20120215 2012-04-10 09:54:27.288:INFO:oejw.StandardDescriptorProcessor:NO JSP Поддержка /, не найдено org.apache.jasper.servlet.JspServlet 2012-04-10 09:54:27.319:INFO:oejsh.ContextHandler:started oejwWebAppContext{/,file:/C:/Users/xyz/Anotherproj1/src/webapp} 2012- 04-10 09:54:27.319:INFO:oejsh.ContextHandler:started oejwWebAppContext{/,file:/C:/Users/xyz/Anotherproj1/src/webapp} 2012-04-10 09:54:27.381:INFO: oejs.AbstractConnector: Started [email protected]:8080


person rmoh21    schedule 10.04.2012    source источник
comment
На первый взгляд это выглядит правильно. Какую версию Jetty вы используете. Есть ли сообщения об ошибках? В чем именно твоя проблема?   -  person andih    schedule 10.04.2012
comment
@andih Ошибка, по сути, представляет собой HTTP 404, когда я пытаюсь открыть ссылку в своем файле ресурсов.   -  person rmoh21    schedule 10.04.2012
comment
@andih Я использую Jetty 8.1.1   -  person rmoh21    schedule 10.04.2012
comment
на случай, если кто-то еще столкнется с этим старым вопросом: github.com/snackunderflow/MoonBase/blob/master/LunarCat/src/   -  person Andbdrew    schedule 14.07.2016


Ответы (3)


У меня работает следующее:

веб.xml:

<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
public class MyApplicationConfig extends Application {

    private static final Set<Class<?>> CLASSES;

    static {
        HashSet<Class<?>> tmp = new HashSet<Class<?>>();
        tmp.add(Resource.class);

        CLASSES = Collections.unmodifiableSet(tmp);
    }

    @Override
    public Set<Class<?>> getClasses(){

       return  CLASSES;
    }    


}
5.xsd"> <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>resteasy.resources</param-name> <param-value>webapp.Resource</param-value> </context-param> <context-param> <param-name>javax.ws.rs.core.Application</param-name> <param-value>webapp.MyApplicationConfig</param-value> </context-param> <!-- set this if you map the Resteasy servlet to something other than /* <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/resteasy</param-value> </context-param> --> <!-- if you are using Spring, Seam or EJB as your component model, remove the ResourceMethodSecurityInterceptor --> <context-param> <param-name>resteasy.resource.method-interceptors</param-name> <param-value> org.jboss.resteasy.core.ResourceMethodSecurityInterceptor </param-value> </context-param> <listener> <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> </listener> <servlet> <servlet-name>Resteasy</servlet-name> <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Resteasy</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>

С участием

public class MyApplicationConfig extends Application {

    private static final Set<Class<?>> CLASSES;

    static {
        HashSet<Class<?>> tmp = new HashSet<Class<?>>();
        tmp.add(Resource.class);

        CLASSES = Collections.unmodifiableSet(tmp);
    }

    @Override
    public Set<Class<?>> getClasses(){

       return  CLASSES;
    }    


}

Ресурс

package webapp;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("/")
@Produces("text/plain")
public class Resource {

   @GET
   public String hello() {
       return "hello";
   }


   @GET
   @Path("/books")
   public String getBooks() {
       return "books";
   }

   @GET
   @Path("/book/{isbn}")
   public String getBook(@PathParam("isbn") String id) {
       return "11123";
   }
}

и основной класс

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap;

public class Main {
    public static void main(String[] args) throws Exception
    {
            Server server = new Server(8080);

            WebAppContext context = new WebAppContext();

            context.setDescriptor("./src/main/webapp/WEB-INF/web.xml");
            context.setResourceBase("./src/main/webapp");
            context.setContextPath("/");

            context.setParentLoaderPriority(true);            

            server.setHandler(context);

            server.start();
            server.join();
    }

}
person andih    schedule 14.04.2012
comment
Большое спасибо, это сработало! Только одна вещь, в вашем файле web.xml есть опечатка - это должен быть ResteasyBootstrap вместо ResteasyBootstap - буква «r» отсутствует. - person rmoh21; 16.04.2012

Вы уверены, что @Path("/*") правильный путь. Попробуйте @Path("/"), возможно, это * проблема. Насколько я знаю, выражения пути не принимают регулярные выражения.

РЕДАКТИРОВАТЬ

Я был неправ, вы можете использовать регулярные выражения в @Path, по крайней мере, RESTEasy поддерживает это.

person Piotr Kochański    schedule 12.04.2012
comment
Пробовал, ни к чему хорошему. Я получаю 404, не найденный в моем браузере, когда я ввожу localhost: 8080/ - person rmoh21; 13.04.2012

Чтобы RESTEasy и Jetty могли работать вместе без файла web.xml, убедитесь, что у вас есть зависимость от resteasy-servlet-initializer в файле pom.xml.

Это может помочь (документация JBoss RESTEasy): https://docs.jboss.org/resteasy/docs/3.0.4.Final/userguide/html/Installation_Configuration.html#d4e111

person leoncc    schedule 26.03.2016