Спокойный веб-сервис с использованием причала и трикотажа возвращает 404

У меня проблемы с моей спокойной веб-службой, использующей встроенный причал и джерси. Я запускаю причальный сервер изнутри приложения ecplise и пытаюсь связаться с сервером с помощью клиента jersey.

Я создал спокойную веб-службу на основе этого руководства: http://jlunaquiroga.blogspot.se/2014/01/restful-web-services-with-jetty-and.html

У меня были проблемы с переносом учебника с Jersey 1.x на 2.x, но, наконец, я запустил и запустил веб-сервер. Теперь проблема в том, что он не отвечает на запросы от клиента (или браузера). Кто-нибудь знает почему?

Вот мой код:

Пакет поставщика:

package org.eclipse.eatop.jetty.helloworld.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; 


@Path("/xmlServices")
public class XMLProjectService {
  @GET     
  @Produces(MediaType.TEXT_XML)     
  public String getProject() 
  {         
      return "<?xml version=\"1.0\"?>" + "<hello> hello world </hello>" ;     
  }
}

Встроенный сервер Jetty:

public Object execute(ExecutionEvent event) throws ExecutionException {
    Server server = new Server(8080);         
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);
    ServletHolder sh = new ServletHolder(new ServletContainer());
    sh.setInitOrder(1);
    sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.eclipse.eatop.jetty.helloworld.rest");
    context.addServlet(sh, "/*");

    try {
        server.start();
    } catch (Exception e) {
   System.out.println("Unable to start jetty web server");
   e.printStackTrace();
    }   
    return null;
}

Клиент:

public class Test {
    public static void main(String[] args) {
        Client client = ClientBuilder.newClient();
        WebTarget target = client.target(getBaseURI()).path("xmlServices");
        System.out.println(target.request("text/xml").get());
    }
    private static URI getBaseURI() {
        return UriBuilder.fromUri("http://localhost:8080/").build();
    }
}

Результат я получаю:

 InboundJaxrsResponse{ClientResponse{method=GET, uri="http://localhost:8080/xmlServices", status=404, reason=Not Found}}

person Emma Wermström    schedule 03.09.2014    source источник
comment
Следует упомянуть, что я использую Jetty 9.2.0.RCO, JavaSE-1.7 и Jersey 2.12.   -  person Emma Wermström    schedule 03.09.2014
comment
Если это поможет: + = org.eclipse.jetty.servlet.ServletHandler@14efd00 - STARTED + = org.glassfish.jersey.servlet.ServletContainer-1b05ad2 @ 3c64e64b == org.glassfish.jersey.servlet.ServletContainer, 1, 1, 1, - НАЧАЛО jetty.servlet.ServletHandler $ Default404Servlet-980200 @ 76a611b5 == org.eclipse.jetty.servlet.ServletHandler $ Default404Servlet, -1, false - НАЧАЛО + - [/estive=›org.eclipse.jetty.servlet.ServletHandlerServletHandler$D 980200   -  person Emma Wermström    schedule 03.09.2014


Ответы (2)


Попробуй это изменить ...

От:

ServletHolder sh = new ServletHolder(new ServletContainer());

To:

ServletHolder sh = new ServletHolder(ServletContainer.class);

Это то, как ваша ссылка на статью использует это.

person Joakim Erdfelt    schedule 03.09.2014

Я тоже боролся с этой частью в течение двух дней и обнаружил, что основная причина кроется в ленивой инициализации ServletContextHandler. Запустите обработчик контекста, как только вы запустите свой причальный сервер. Будет работать нормально.

person Anandhan    schedule 25.02.2016