我正在尝试配置嵌入式jetty来与我的Jersey资源交谈,但我无法弄清楚如何做到这一点.我尝试过几种不同的东西但似乎没什么用. jetty教程并没有真正处理如何使用Jersey.任何代码建议或链接都非常感谢
编辑:
- package pojo;
- import org.eclipse.jetty.server.Server;
- import org.eclipse.jetty.servlet.DefaultServlet;
- import org.eclipse.jetty.servlet.ServletContextHandler;
- import org.eclipse.jetty.servlet.ServletHolder;
- import org.glassfish.jersey.servlet.ServletContainer;
- public class Main {
- public static void main(String[] args) throws Exception {
- Server server = new Server(8112);
- ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
- context.setContextPath("/");
- server.setHandler(context);
- ServletHolder h = new ServletHolder(new ServletContainer());
- h.setInitParameter("com.sun.jersey.config.property.resourceConfigClass","com.sun.jersey.api.core.PackagesResourceConfig");
- h.setInitParameter("com.sun.jersey.config.property.packages","resources");
- h.setInitOrder(1);
- context.addServlet(h,"/*");
- try
- {
- server.start();
- server.join();
- }
- catch (Throwable t)
- {
- t.printStackTrace(System.err);
- }
试图连接到这个类:
- package resources;
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.PathParam;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.Request;
- import javax.ws.rs.core.UriInfo;
- import com.codahale.metrics.MetricRegistry;
- import com.codahale.metrics.Timer;
- import java.util.ArrayList;
- import java.util.List;
- import pojo.Party;
- @Path("/parties")
- public class AllPartiesResource {
- @Context
- UriInfo url;
- @Context
- Request request;
- String name;
- public static final Timer allTime = DBConnection.registry.timer(MetricRegistry.name("Timer","all-parties"));
- @GET
- @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
- public List<Party> getAllParties() throws Exception
- {
- final Timer.Context context=allTime.time(); //start the timer
- List<Party> list = new ArrayList<Party>();
- DBConnection.readAllData();
- list.addAll(DBConnection.getPartyCollection().values());
- context.stop(); //stops timer
- return list;
- // ---> code for Jackson
- // String string;
- // DBConnection.readAllData();
- // ObjectMapper jsonMapper = new ObjectMapper();
- // string=jsonMapper.writeValueAsString(DBConnection.getPartyCollection());
- // return string;
- }
- @GET
- @Path("count")
- @Produces(MediaType.TEXT_PLAIN)
- public String getPartyCount() throws Exception
- {
- DBConnection.readAllData();
- return String.valueOf(DBConnection.getPartyCollection().size());
- }
- @Path("{party}") //points to OnePartyResource.class
- public OnePartyResource getParty(@PathParam("party")String party)
- {
- name = party;
- return new OnePartyResource(url,request,party);
- }
- }
解决方法
您在代码中混合了两个版本的Jersey – 来自Jersey 2.x的ServletContainer(包org.glassfish.jersey.*)和来自Jersey 1.x的属性(包/前缀com.sun.jersey.*).
要使用Jersey 2.x部署您的应用,请更改这两行
- h.setInitParameter("com.sun.jersey.config.property.resourceConfigClass","com.sun.jersey.api.core.PackagesResourceConfig");
- h.setInitParameter("com.sun.jersey.config.property.packages","resources");
从你的主要方法到
- h.setInitParameter(ServerProperties.PROVIDER_PACKAGES,"resources");
并查看其他ServerProperties您可能会觉得有用.