Integrating Jetty with RESTEasy

匿名 (未验证) 提交于 2019-12-03 08:39:56

问题:

Any links on how to integrate Jetty and RESTEasy? I am kinda stuck trying to configure RESTEasy with Jetty together....and there seems to be no credible help on the web.

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(); } 

My Web.xml is copied directly from: http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Installation_Configuration.html

The error I get back is a HTTP 404 when I try to open up a link in my resource file. Everything looks reasonable on the surface, any suggestions?

My resource file looks like:

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";    } } 

This is the prints that I see when Jetty starts up:

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 Support for /, did not find org.apache.jasper.servlet.JspServlet 2012-04-10 09:54:27.319:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/C:/Users/xyz/Anotherproj1/src/webapp} 2012-04-10 09:54:27.319:INFO:oejsh.ContextHandler:started o.e.j.w.WebAppContext{/,file:/C:/Users/xyz/Anotherproj1/src/webapp} 2012-04-10 09:54:27.381:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

回答1:

The follwing works for me:

web.xml:

<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_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> 

With

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;     }       } 

Resource

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";    } } 

and Main Class

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();     }  } 


回答2:

Are you sure that @Path("/*") is correct path. Try @Path("/") maybe this * is a problem. As far as I know path expressions does not accept regexps.

EDIT

I was wrong, you can use regexps in @Path, at least RESTEasy supports that.



回答3:

To get RESTEasy and Jetty to work together without a web.xml ensure you have a dependency on resteasy-servlet-initializer in your pom.xml.

This may help (JBoss RESTEasy documentation): https://docs.jboss.org/resteasy/docs/3.0.4.Final/userguide/html/Installation_Configuration.html#d4e111



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